Frage

Gibt es ein Äquivalent Operator Haskell Liste Differenzoperator \\ in F #?

War es hilfreich?

Lösung

Wurde prallt, aber ich glaube, dass es wert ist hier die Umsetzung von ( /-/ ) zu schreiben (das F # Version von 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

Dies wird als Haskells \\ arbeiten, so dass (xs @ ys) /-/ xs = ys. Zum Beispiel: (7 :: [1 .. 5] @ [5 .. 11]) /-/ [4 .. 7] wertet in [1; 2; 3; 5; 7; 8; 9; 10; 11]

.

Andere Tipps

Nein ... es einfach schreiben und es ein Infixoperator --using den Satz von Sonderzeichen machen. Backslash (\) ist nicht in der Liste unten, so wird es als Infixoperator nicht. Sehen Sie die Handbuch :

  

Infix-op: =

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

**OP
     

Präfix-op: =

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

Filter Artikel aus der Menge der Subtrahend:

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

Ich verwende diese:

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

Wenn jemand ein Problem sieht, lassen Sie es mich wissen.

Ist für Listen, so könnte es Duplikate in der Folge sein. Zum Beispiel:

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

Angenommen, Sie wirklich herkömmliche Einstelldifferenzdruck wollen anstatt die seltsam geordnete-but-unsortiert multiset Subtraktion, die Haskell bietet offenbar konvertiert nur die Listen-Sets mit dem eingebauten in set Funktion und dann die eingebauten in - Operator zu berechnen die eingestellte Differenz:

set xs - set ys

Zum Beispiel:

> set [1..5] - set [2..4];;
val it : Set<int> = seq [1; 5]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top