在OCaml中一起使用List.exists,List.for_all和List.filter

时间:2018-10-03 23:48:46

标签: ocaml higher-order-functions

我正在尝试通过这些类型中的列表内容过滤用户定义类型的列表,我想知道是否存在使用List.filterList.exists和{ {1}}来访问该内部列表,而不是创建一个函数来访问它。

List.for_all

是否有一种方法可以仅使用这些List函数来创建不是特定颜色的猫的列表?这是一个作业问题,因此我不能真正包含我的代码,但是我添加了一个函数来隔离类型中的颜色列表,然后比较这些列表

谢谢!

1 个答案:

答案 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 )