是否有同等的操作者Haskell的清单的差异操作员 \\ 在F#?

有帮助吗?

解决方案

是反弹,然而我相信这是值得在这里写的执行情况 ( /-/ ) (F#版本的Haskell \\):

let flip f x y = f y x

let rec delete x = function
  | [] -> []
  | h :: t when x = h -> t
  | h :: t -> h :: delete x t

let inline ( /-/ ) xs ys = List.fold (flip delete) xs ys

这将作为Haskell \\, ,因此, (xs @ ys) /-/ xs = ys.例如: (7 :: [1 .. 5] @ [5 .. 11]) /-/ [4 .. 7] 评估成 [1; 2; 3; 5; 7; 8; 9; 10; 11].

其他提示

不...只是把它写和使它成为一个缀操作人员--使用设置的特殊字符。反斜杠(\)是不是在下列表中,所以不会的工作作为一个缀操作员。看看 手册:

缀-op:=

or || & && <OP >OP $OP = |OP &OP ^OP :: -OP +OP *OP /OP %OP

**OP

前缀-op:=

!OP ?OP ~OP -OP +OP % %% & &&

筛选项目从设定的减数:

let ( /-/ ) xs ys =
    let ySet = set ys
    let notInYSet x = not <| Set.contains x ySet
    List.filter notInYSet xs

我使用的是这个:

let (/-/) l1 l2 = List.filter (fun i -> not <| List.exists ((=) i) l2) l1

如果有人看到一个问题,让我知道。

是的列表,因此有可能重复的结果。例如:

[1;1;2] /-/ [2;3] would be eq to [1;1]

假设你真的想要常设的差异而不是奇怪的命令但未分类的多集减,Haskell显然提供,只是转换的名单,以集中使用的内在 set 功能,然后使用的内在 - 操作人员来计算的设置的差别:

set xs - set ys

例如:

> set [1..5] - set [2..4];;
val it : Set<int> = seq [1; 5]
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top