Ich bin gerade dabei, Scheme zu lernen. Ich habe kürzlich (zu viel!) Zeit damit verbracht, einen Fehler in einem Programm zu finden, bevor ich merkte, dass ich das 'else' Wort in einer cond-Klausel verpasste. Aber das Verhalten unter solchen Umständen scheint etwas seltsam zu sein. Beim Experimentieren mit den Bedingungen mit nur einem einfachen Programm (unten) wird das 'was auch immer' wie erwartet in der else-Klausel angezeigt, aber auch angezeigt, aber ohne das 'else' wird es mit den umgebenden doppelten Anführungszeichen und dem uninterpretierten neuen angezeigt Linie buchstäblich gedruckt. Kann mir jemand erklären, was passiert? TIA.Was passiert in einer Scheme 'cond' Klausel, wenn 'else' weggelassen wird?
(define (foo x)
(cond ((eq? x 0) (display "zero\n"))
(display "whatever\n")))
(define (bar x)
(cond ((eq? x 0) (display "zero\n"))
(else (display "whatever\n"))))
In the repl window:
Welcome to DrScheme, version 4.1.5 [3m].
Language: Pretty Big; memory limit: 128 megabytes.
> (foo 0)
zero
> (bar 0)
zero
> (foo 2)
"whatever\n"
> (bar 2)
whatever
>
Tatsächlich ist 'else' in R5RS Scheme zumindest kein Synonym von true. Es ist nur eine Kennung, die das Makro erkennt. –
die operational noch ein Synonym für wahr ist. –