Ich versuche, eine Funktion im Schema zu definieren, die eine Nachricht beim Aufruf, gefolgt von einem Zeilenumbruch druckt. Um dies zu tun Ich habe versucht, wie dieses verschachtelte Lambda zu verwenden:verschachtelte Lambda in Schema
(define message
(lambda (msg)
(lambda (newL)
(newline)
)
(display msg))
)
Allerdings, wenn ich dies tun, und rufen Sie die Funktion wie:
(message "#f")
es nur die #f druckt, und tut Erstellen Sie keine Zeilenumbrüche. Wenn ich die Lambda-Ordnungen in der Funktion umkehre und die Position der newL- und msg-Lambdas vertausche, dann druckt sie nur einen Zeilenumbruch und zeigt die Nachricht nicht an!
Die Funktion in diesem Block von Code aufgerufen wird:
(define (permute upList)
(if (null? upList)
(message "#f")
;permutation code
)
)
Die Fehlermeldung erhalten, wenn sie nicht verschachtelten LAMBDA ist wie folgt:
Fehler: Aufruf von nicht-Prozedur: #
Call history:
<syntax> (permute (quote()))
<syntax> (quote())
<syntax> (##core#quote())
<eval> (permute (quote()))
<eval> [permute] (null? upList)
<eval> [permute] (message "#f")
<eval> [message] ((display msg) (newline))
<eval> [message] (display msg)
<eval> [message] (newline) <--
Jede Hilfe wäre willkommen.
Warum brauchen Sie überhaupt ein verschachteltes Lambda? Tun Sie einfach '(definieren Sie Nachricht (Lambda (msg) (Anzeige msg) (newline)))', oder, noch einfacher, '(define (Nachricht msg) (Anzeige msg) (newline))'. –
Warum würden Sie verschachtelte Lambdas verwenden? – uselpa
Es gibt mir eine Fehlermeldung "Call of Non-Prozedur", weil ich es in einer Funktion aufrufen, die in einer Liste als ein Argument nehmen. – Starscreen60