3 Stimmen

Schema: Warum ist es notwendig, hier ein Kond zu verwenden?

Ich habe versucht, eine (einfache, d.h. ohne eqan? ) one? als solche funktionieren:

(define one?
  (lambda (n)
    ((= 1 n))))

Aber das obige funktioniert nicht, denn wenn ich es so aufrufe:

(one? 1)

Ich werde mit dieser Fehlermeldung begrüßt:

procedure application: expected procedure, given: #t (no arguments)

Der richtige Weg (von Der kleine Betrüger ) zu schreiben, ist:

(define one?
  (lambda (n)
    (cond
      (else (= 1 n)))))

Warum ist es notwendig, eine cond mit einer else Klausel, anstatt nur die (= 1 n) ?

6voto

mqp Punkte 66863

Es gibt keinen Grund, warum Sie das tun sollten. Wenn ich nach Hause komme, werde ich in meiner TLS-Kopie nachsehen, ob ich herausfinden kann, was hier vor sich geht, aber Sie übersehen nichts Grundlegendes bei cond oder sonst etwas.

Antwort auf Ihre obige Anmerkung: Es funktioniert nicht, weil Sie einen zusätzlichen Satz von Klammern im Körper des Lambdas haben. Es sollte sein

(lambda (n) (= 1 n))

Die zusätzlichen Klammern in Ihrer Version bedeuten, dass anstelle der Rückgabe des Wertes #t o #f versuchen Sie, diesen Wert als Funktion ohne Argumente aufzurufen.

0voto

Andrew Punkte 570

Nicht im Besitz einer Kopie von Der kleine Betrüger praktisch, Ihr Beispiel sieht so aus, als sollte es funktionieren. Ich denke, die cond ist irrelevant. In psudeo-C ist der Äquivant (mit cond):

int
one(int n)
{     
    switch (foo) {
        default:
           return  1 == n;
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X