Können Sie mehrere Anweisungen in einer "if" -Anweisung ausführen?
Dies ist meine Funktion:
(defun MyFunction(input)
(let ((NEWNUM (find input num)))
(if (find input num) //if this
(setq num NEWNUM) (FUNCT2) //then execute both of these
(list 'not found)))) //else output this
So, nachdem die if
Aussage möchte ich ausführen zu können (setq num NEWNUM)
gefolgt von (FUNCT2)
um eine neue variable und dann eine Funktion aufrufen. Irgendwelche Ideen auf, wie dies zu tun?
InformationsquelleAutor der Frage Jack Null | 2010-05-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um verschiedene Dinge zu tun in der Reihenfolge, die Sie wollen
progn
.InformationsquelleAutor der Antwort Chuck
Wenn Ihr
if
ist "one-armed", wie Sie es nennen, (daß ist, es enthält keineelse
branch), ist es in der Regel einfacher und mehr Redewendungen zu verwendenwhen
undunless
: http://www.cs.cmu.edu/Groups/AI/html/hyperspec/HyperSpec/Body/mac_whencm_unless.htmlBeim Aufruf
(when pred x y ... z)
ist, wird es nur bewertenx y z
nacheinander, wennpred
wahr ist.unless
verhält sich ähnlich, wennpred
ist NULL.x y z
darstellen kann eine beliebige Anzahl von Aussagen, die von einem nach oben. Also:ist genau das gleiche wie
Einige Leute sagen
when
undunless
sollte immer benutzt werden, 'one-armed-ifs" wegen der Klarheit.Edit: Dein thread brachte mich auf die Idee. Dieses makro:
sollte, aktivieren Sie diese:
So das Allgemeine format ist:
Je nach Zustand, es wertet alle Unterformulare in der ersten oder zweiten, sondern gibt nur die Letzte.
InformationsquelleAutor der Antwort Zorf
Sie nicht verwenden können, mehrere Anweisungen mit
if
außer mitprogn
wie oben gepostet. Aber es ist diecond
form,InformationsquelleAutor der Antwort JohnMaraist
Nur hinzuzufügen, können Sie auch das (beginnen BSP1 bsp2...) - syntax zu bewerten, mehr als einen Ausdruck in Lisp nacheinander. Mit dieser auf ein, wenn der ast hat den gleichen Effekt wie die Verwendung von mehreren Anweisungen.
InformationsquelleAutor der Antwort Hrishi