2016-10-05 6 views
7

Dies ist eine Schulaufgabe, aber alles, was ich posten werde, wird nur von mir und mir erledigt. Deshalb benötige ich nur deine Hilfe für einen winzigen Schritt in meiner Aufgabe, bei der ich feststecke.F # If Statement List.exists

let rec removeDuplicates2 xs = 
    match xs with 
    |[]->[] 
    |y::ys -> if y = (List.exists y ys) then 
       (removeDuplicates2 ys) 
      else 
       y::(removeDuplicates2 ys) 

printfn "%A" (removeDuplicates2 [3;1;3;2;1]) // result must be [3;1;2] 

Was benötige ich Hilfe für die if-Anweisung macht, dass, wenn das Element y prüft ein Mitglied der Liste ys ist

im Moment i den Fehler zu sagen: „Dieser Ausdruck wurde erwartet Typen hat '' a -> bool ' aber hier ist Typ ' bool '"

kann mir jemand sagen, was ich falsch mache?

+3

Zuerst vergleichen Sie 'y' mit' List.exists y ys', die wahr oder falsch zurückgeben soll. Sie wollten wahrscheinlich schreiben "if (List.exists y ys) then" –

+5

Zweitens, "List.exists" erwartet eine Funktion. Wenn Sie überprüfen möchten, ob eine Liste einen Eintrag enthält, verwenden Sie 'List.contains' –

+1

Ich denke, die Übung impliziert nicht die Verwendung von Standardfunktionen :) –

Antwort

8

List.exists erwartet, dass das erste Argument eine Funktion ist, die für das Element überprüft wird und einen booleschen Wert zurückgibt. Sie möchten überprüfen, ob Element auf der Liste könnten Sie schreiben:

if List.exists ((=) y) ys then 

oder sogar:

if List.contains y ys then 

folgende Panagiotis Vorschlag.

+0

Das funktioniert! Vielen Dank! – Nulle