OK, definieren zunächst die Funktion:
printEven(I,N) when I >= N -> ok;
printEven(I,N) ->
if
I rem 2 == 0 -> io:format("~p~n",[I]), printEven(I+1,N);
I rem 2 == 1 -> printEven(I+1,N)
end.
Erlang eine funktionale Programmiersprache ist und (per Definition) Funktionen 'haben' einen Wert, so dass Sie 'etwas' zurück gehen zu bekommen. Per Konvention ist das Atom, das Sie bei der Fertigstellung einer Funktion, die Sie für Nebenwirkungen verwenden, zurückbekommen, ok ', das ist das Beste, das Sie hier verwenden können.
Sie können den Rückgabewert "stillschweigend verwerfen", wenn Sie möchten. Sie tun das, wenn Sie die Funktion durch Muster auf die Variable Anpassung aufrufen ‚do not care‘ (der Unterstrich ist):
_ = printEven(3,9),
oder durch die Funktion ohne Mustererkennung Aufruf:
printEven(3,9),
Sie sind jedoch viel besser, immer Rückgabewerte durch Musterabgleich zu überprüfen, wenn Sie eine Funktion aufrufen:
ok = printEven(3,9),
Dies ist eine wirklich gute Gewohnheit zu bekommen, weil Sie eine Menge lib verwenden rary Funktionen, die Fehlercodes zurück, wie Sie von ihren Spezifikationen sehen:
@spec funky(X) -> [ok | {error, bad_op} | {error, wig_out}]
Wenn flippige Effekte hat Seite wollen Sie wissen, es jetzt indem sie sie mit einem Muster übereinstimmen Aufruf fehlgeschlagen ist, so dass es hier zum Absturz und jetzt, wenn flippig ausfällt:
ok = funky(99),
wenn Sie es '_'
übereinstimmen oder den Rückgabewert ignorieren wird es 268 Zeilen später abstürzen, wenn Ihr mojo flippige erwartet seine thang getan zu haben, und dann ist es viel schwerer zu finden.
Dies ist glückliche Pfad-Programmierung, die das Erledigt in Erlang ist. "Lass es krachen" ist das Motto. Wenn Sie Erlang neu sind, werden Sie das sehr beunruhigend finden - wie nackt herumlaufen. Mach dir keine Sorgen, es ist eine gute Sache. Es führt zu viel Code 'nicht geschrieben'.
(Sie sollen auch in der Gewohnheit, die Klausel des Setzens, die die Rekursion als Top-Klausel endet, wie hier gezeigt - es macht den Code zu lesen sooo viel einfacher, wenn Sie eine Multi-Klausel Funktion.)
Umm, dieser Code kann nicht kompilieren - die erste Klausel müsste mit einem Semikolon enden, nicht mit einem Punkt. Laufen Sie es in der Shell? Wenn Sie dann sind, wird es immer drucken, was es zurückgibt, und es gibt immer etwas zurück. Wenn Sie es nicht in der Shell ausführen, dann lassen Sie einfach das io: format ... –