Ich bin völlig neu in F # (begann damit heute) und relativ neu zu funktionalen Programmierung (ich habe geringe Erfahrung mit Lisp). Ich möchte eine Funktion beenden, indem Sie einen Wert zurückgeben, wenn eine bestimmte Bedingung erfüllt ist, damit der Rest der Schleife nicht ausgeführt wird. Hier ist eine C# Darstellung von dem, was ich tun möchte:Return-Wert zu Break-Funktion
bool CheckRow (int n, int i)
{
for(int j = 0; j < 9; j++)
if (n == sudoku[i][j])
return false;
return true;
}
Ich habe versucht, die gleiche Funktion in F #, wie diese Umsetzung (Sudoku ist ein array2D):
let CheckRow (n : int) (i : int) : bool =
for j = 0 to 8 do
if (n = sudoku.[i, j]) then
false
true
Allerdings bekomme ich folgende Fehler bei false innerhalb des if: "Dieser Ausdruck wurde erwartet, dass er type unit hat, aber hier hat bool". Was ist der richtige Weg, um innerhalb einer F # -Funktion zurückzukehren?
Mögliche Duplikat von [F # Rückkehr boolean Wert in Funktion] (http://stackoverflow.com/questions/19195346/f-returning-boolean-value-in-function) –
Ich würde hier annehmen, dass du das nicht auf eine idiomatische Weise machst, ich denke, du könntest den seq-Typ verwenden, um dir hier zu helfen und es funktionaler zu machen –
Wenn Sie denken, dass Sie aus einer F # -Funktion vorzeitig aussteigen müssen, ist das normalerweise ein Hinweis darauf, dass Sie über das Problem falsch nachdenken. Hier möchten Sie sehen, ob in der Zeile ein Wert vorhanden ist, der eine bestimmte Bedingung erfüllt. Dafür steht die Funktion 'Array.exists'. (Oder 'List.exists' oder' Seq.exists' - siehe Bartek Kobyleckis Antwort). – rmunn