Wie deklarieren Sie eine variable innerhalb einer Scheme-Funktion?
Ist es möglich, dies zu tun? Sagen wir mal ich möchte das Letzte element einer Liste, würde ich eine variable erstellen i = 0
, und erhöhen Sie es, bis es gleich um Längen. Irgendeine Idee? Ein Beispiel wäre sehr dankbar.
Dank,
- Welchen Algorithmus haben Sie im Sinn haben für immer das Letzte element?
- durchqueren Sie durch die Liste, bis
i
gleich Länge? Klingt es vernünftig, in der Regelung? - es klingt wie eine Verschwendung, weil man das Durchlaufen der Liste doppelt; die erste Zeit zu berechnen die Länge. Der Algorithmus soll linear sein-Zeit (nicht quadratisch wie @sepp2k meint), sondern zwei-pass und nicht idiomatisch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es mehrere Möglichkeiten, eine variable zu deklarieren; die sauberste ist
let
:Aber Sie brauchen nicht, um das Letzte element einer Liste. Verwenden Sie einfach die Rekursion:
Hinweis: wenn Sie möchten, können Sie eine variable zum Zwischenspeichern
cdr
's Ergebnis:last tail
gehören zu denif
oder es ist eine separate Erklärung? Wie können wir unterscheiden?if
Ausdruck. Man kann sagen, durch die Klammern und durch meine Verwendung von Einrückungen.Ja, es ist möglich, zu definieren, lokale Variablen im Programm, sowohl mit
let
oderdefine
innerhalb einer Funktion. Mitset!
ist, ist es auch möglich, zuweisen einer variable, wie Sie sich das vorstellen.That being said, sollten Sie wahrscheinlich nicht lösen Ihr problem auf diese Weise. In Scheme ist es generell eine gute Praxis, um zu vermeiden
set!
wenn Sie nicht brauchen, um (und in diesem Fall sind Sie definitiv nicht brauchen). Weitere Iteration über eine Liste mit Indizes ist in der Regel eine schlechte Idee als Schema-Listen verknüpft sind, Listen und als solche wahlfreien Zugriff O(n) (was dielast
Funktion, wie Sie wollen, um es zu implementierenO(n^2)
).So dass eine einfache rekursive Implementierung, die ohne Indizes wäre mehr idiomatische und schneller als das, was Sie planen zu tun, und als solche vorzuziehen.
set!
?