2017-06-06 3 views
0

Kann mir jemand erklären, was dieser Code macht und wie er funktioniert?Common LISP Code Erklärung

+2

Wenn Sie die Sprache nicht verstehen, sollten Sie darüber lesen, lernen Sie es Grammatik. Dies ist nicht der richtige Ort für diese Art von Fragen – gmoshkin

+0

Was hast du im Code verstanden? – coredump

+0

Sie können die ['STEP'] (http://clhs.lisp.se/Body/m_step.htm) oder [' TRACE'] (http://clhs.lisp.se/Body/m_tracec.htm) verwenden um zu sehen, wie eine Funktion funktioniert. – Barmar

Antwort

0

Ein kurzer Durchlauf durch den Code zeigt, dass es sich um eine Funktion handelt, die die größte Zahl mit zwei Zahlen oder einer Liste von Zahlen zurückgibt. Es gibt nil zurück, wenn ein Atom angegeben wurde, und ein Fehler, wenn eines der Elemente der Liste keine Zahl ist. hier sind einige der Ergebnisse, die ich habe: CL-USER> (f '(1 2 3 4)) 4 CL-USER> (f '(1 5 2 4)) 5 CL-USER> (f '(1 5 2 4 7)) 7 CL-USER> (f 'y) NIL CL-USER> (f 3 'y) Y Eine Art Fehler aufkommt, wenn ein nicht-numerische in der Liste enthalten ist: CL-USER> (f '(1 x 2 4 7)) gibt dem folgenden Fehler Den Wert X ist nicht vom Typ NUMBER beim Binden SB-KERNEL :: X [Zustand des Typs TYPE-ERROR]

Wie funktioniert es? Die Funktion vergleicht Zahlen in einer Liste, den ersten Parameter und eine Zahl, zweiten Parameter und gibt die größte von allen zurück. Dies geschieht durch rekursives Vergleichen der ersten zwei Nummern der Liste, die die größere Zahl, die sie vergleicht, mit dem Rest der Liste liefert.