我正在尝试通过这些类型中的列表内容过滤用户定义类型的列表,我想知道是否存在使用List.filter
,List.exists
和{ {1}}来访问该内部列表,而不是创建一个函数来访问它。
List.for_all
是否有一种方法可以仅使用这些List函数来创建不是特定颜色的猫的列表?这是一个作业问题,因此我不能真正包含我的代码,但是我添加了一个函数来隔离类型中的颜色列表,然后比较这些列表
谢谢!
答案 0 :(得分:2)
您可以模式匹配应用于过滤器的功能。要查找所有非黑色或体重<14的猫,可以使用:
utop # List.filter (function Cat (_,_,cat_colors) ->
List.for_all (fun x -> x != Black)
cat_colors ) cats ;;
- : cat list = [Cat (13, 15, [Red; White])]
utop # List.filter (function Cat (weight,_,_) -> weight < 14) cats ;;
- : cat list = [Cat (13, 15, [Red; White])]
其余的应该可以通过两个应用程序List.for_all
(作为逻辑公式:∀c1:颜色∀c2:cat_cols。c1≠c2)来实现。将鼠标悬停在扰流板上方以显示完整的解决方案:
let choose colors = List.filter (function Cat (_,_,catcols) -> List.for_all (fun col -> List.for_all ((!=) col) catcols) colors )