Haskell的清单的差异员在F#
-
09-06-2019 - |
题
是否有同等的操作者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]
不隶属于 StackOverflow