\\
F#の Haskell のリスト差分演算子に相当する演算子はありますか?
fryguybob
質問する
2000 次
5 に答える
5
バウンスされましたが、( /-/ )
(Haskell の の F# バージョン\\
) の実装をここに記述する価値があると思います。
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]
ます。
于 2012-09-15T08:27:37.520 に答える
5
いいえ... 特殊文字のセットを使用して、それを書いて中置演算子にします。バックスラッシュ ( \
) は以下のリストにないため、中置演算子として機能しません。マニュアルを参照してください:
中置操作:=
or || & && <OP >OP $OP = |OP &OP ^OP :: -OP +OP *OP /OP %OP **OP
接頭辞操作:=
!OP ?OP ~OP -OP +OP % %% & &&
于 2008-09-12T19:41:25.393 に答える
2
減数のセットからアイテムをフィルタリングします。
let ( /-/ ) xs ys =
let ySet = set ys
let notInYSet x = not <| Set.contains x ySet
List.filter notInYSet xs
于 2011-05-22T00:29:08.330 に答える
1
私はこれを使用しています:
let (/-/) l1 l2 = List.filter (fun i -> not <| List.exists ((=) i) l2) l1
誰かが問題を見つけたら、私に知らせてください。
リスト用なので、結果が重複する可能性があります。例えば:
[1;1;2] /-/ [2;3] would be eq to [1;1]
于 2015-01-15T00:58:16.397 に答える
-2
Haskell が提供しているように見える、順序付けられているがソートされていない奇妙な集合減算ではなく、従来の集合差が本当に必要であると仮定すると、組み込みset
関数を使用してリストを集合に変換し、組み込み-
演算子を使用して集合差を計算します。
set xs - set ys
例えば:
> set [1..5] - set [2..4];;
val it : Set<int> = seq [1; 5]
于 2009-05-06T02:29:13.457 に答える