Verwendung von Let in Scheme

8

Ich möchte ein Programm schreiben, um die Wurzeln der quadratischen Gleichung in Schema zu finden. Ich habe LET für bestimmte Bindungen verwendet.

%Vor%

Ich habe die Diskriminante mit 4ac definiert, weil ich (* 4 a c) nicht wollte. Obwohl ich (4ac (* 4 a c)) definiert habe, gibt es mir diesen Fehler:

  

expand: ungebundener Bezeichner im Modul in: 4ac .

Meine Frage ist, wie lässt sich bewerten (welche Reihenfolge)? Und wenn ich 4ac in meinem let möchte, sollte ich ein anderes inneres let schreiben? Gibt es einen besseren Weg, dies zu tun?

    
unj2 03.06.2009, 17:32
quelle

4 Antworten

27

Verwenden Sie let* anstelle von let .

Der Unterschied zwischen let und let* ist folgender:

let* bindet Variablen von links nach rechts. Frühere Bindungen können in neuer Bindung weiter rechts (oder unten) verwendet werden.

let andererseits kann man sich als syntaktischen Zucker (oder Makro) für einfache Lambda-Abstraktion vorstellen:

%Vor%

entspricht

%Vor%     
Jonas 03.06.2009, 17:37
quelle
8
  • 4ac ist eine Variable mit einem numerischen Wert, daher ist (4ac) nicht sinnvoll.

  • LET bindet alle Variablen, aber die Variablen können nicht in den Berechnungen für die Werte verwendet werden.

Das funktioniert nicht:

%Vor%

Verwenden:

%Vor%

Oben führt A und B mit dem ersten LET ein. Im zweiten LET können jetzt sowohl A als auch B verwendet werden, um C zu berechnen.

Oder:

%Vor%     
Rainer Joswig 03.06.2009 17:51
quelle
3

Sie benötigen ein spezielles let -construct ( let* ) hier, da sich die Variablen innerhalb der Let-Definition aufeinander beziehen.

Es ist eher ein Problem, einen Bereich zu definieren, als einen Ausdruck auszuwerten (In den üblichen let -Definitionen spielt die Reihenfolge der Auswertung keine Rolle, da die Werte sich nicht gegenseitig verwenden können)

    
Dario 03.06.2009 17:41
quelle
2

Wenn Sie let verwenden, sind die Bindungen in keinem der Körper sichtbar. Verwenden Sie stattdessen let * und sehen Sie sich die RNRS-Dokumentation für Details an.

    
grettke 11.06.2009 19:34
quelle

Tags und Links