Frage

Ich bin an Tag 1 Stunde 1, um mir selbst Schema zu unterrichten. Unnötig zu sagen, ich verstehe nichts. Also lese ich Der kleine Schemier und mit diesem Ding:

http://sisc-scheme.org/sisc-online.php

als Dolmetscher.

Ich muss verwenden ' Zum Beispiel in

(atom? 'turkey)

Um einen "undefinierten Variablen" -Fehler zu vermeiden. Das ', Laut dem Buch ist eine gemeinsame Lisp -Sache.

Ich habe zwei Fragen:

  1. Ist der Dolmetscher, den ich oben erwähnt habe, eine gute? Können Sie einen anderen empfehlen? Ich brauche einen, der gut passt Der kleine Schemier.

  2. Was ist '?

War es hilfreich?

Lösung

Die Form 'foo ist einfach ein schnellerer Weg, um die spezielle Form einzugeben

(quote foo)

Das heißt: "Bewerten Sie den Namen Foo nicht und ersetzen Sie ihn durch seinen Wert; ich meine den Namen Foo wirklich".

Ich denke, SISC ist vollkommen in Ordnung, um die Übungen in TLS zu erkunden.

Andere Tipps

Sie müssen die grundlegenden Bewertungsregeln des Schemas verstehen.

Zuerst:

(atom? 'turkey)

Die Liste ist also eine Funktionsanwendung, also atom? wird auf eine Funktion bewertet.'turkey ist eine kurze Handnotation für (quote turkey). Bewertung (quote turkey) Gibt das Symbol turkey.

Als nächstes wird die Funktion auf das Symbol angewendet turkey und ein Rückgabewert wird berechnet.

Zweite

(atom? turkey)

Auch hier haben wir eine Funktionsanwendung und atom? wird auf eine Funktion bewertet. Diesmal turkey ist eine Variable. Bewertung turkey Gibt den an ihn gebundenen Wert an - was auch immer er ist.

Dann wird die Funktion auf den Wert der Variablen angewendet turkey.

Zusammenfassung

turkey ist eine Variable, die auf ihren Wert bewertet wird. 'turkey ist (quote turkey), die auf das Symbol bewertet wird turkey.

Das Schema wiederverwendet S-Expressionen und baut seine Programme aus S-Expressionen aus. Dies führt zu dem Problem, dass irgendwann turkey Sollte eine Variable sein und manchmal sollte es das Symbol sein. Dies ist für den Anfänger etwas verwirrend. Nach einiger Zeit sehen Sie die Kraft dahinter.

SISC ist gut, aber ein noch leichterer Online -Schema -Executor ist es http://codepad.org. Es ist eigentlich keine Wiederholung, als es nicht interaktiv ist, aber ziemlich nah. Der Code, den Sie einreichen, wird auf dem ausgeführt Server Seite anstatt ein Browser -Applet zu verwenden. Und Sie können Code teilen, den Sie mit kurzer URL ausführen.

Das um Seite auf Codepad sagt, dass "MzScheme v372 [CGC] verwendet wird.

Ich verwende Codepad für alle Arten von schnellen Snippet -Tests (einschließlich Testcode -Proben für SO -Antworten!).

Für die Zitatsyntax kann der Unterschied mit wie diesen verwendet werden:

(let ((x 5))
  (display x) (newline)
  (display 'x) (newline))

Dies zeigt:

5
x

Im ersten Fall, x wird bewertet und an übergeben an display, was im zweiten Fall druckt, die, die Symbol x (was nicht dasselbe wie eine Zeichenzeichenfolge ist) an übergeben display, was den Namen des Symbols druckt.

Kurzschrift für (quote ...), ' verwandelt Code in Daten.

stuff ist ein Symbol, das bedeutet, dass es ein Name einer Variablen oder eines Namens einer Funktion usw. sein kann.
'stuff Gibt dir das Symbol "Zeug" selbst.

(dostuff "on" those 4 :parameters) Bei der Bewertung würde die Funktion ausgeführt dostuff mit vier Parametern: String, Inhalt der Variablen, Anzahl und Schlüsselwort.
'(dostuff "on" those 4 :parameters) Bei der Bewertung würde der obige Code zurückgegeben, was bei der Bewertung wiederum die Funktion des Laufs der Funktion dostuff Mit diesen vier Parametern ..

Zum Beispiel: Rennen '''somecode, es kehrt zurück ''somecode. Laufen ''somecode, es kehrt zurück 'somecode. Laufen 'somecode, es kehrt zurück somecode. Laufen somecode, und ... nun ja... somecode werde rennen.

Das kannst du sagen ' ist ein bisschen wie das Gegenteil von (eval..).

(eval (eval (eval '''(print "hello")))) würde "Hallo" drucken.
(eval (eval (eval ''''(print "hello"))) - Beachten Sie noch einen ' dann eval - würde nichts drucken, aber es würde den Code zurückgeben (print "hello") selbst!!

Abgesehen davon, dass Liberser diesen zurückgegebenen Code (und manchmal sogar handgeschriebenen Code) "Liste" anstelle von "Code" nennen, aus Gründen, die offensichtlich bluteten, wenn Sie ein bisschen tiefer graben. Viel Glück :)

  1. Ich schlage vor, Sie wechseln in eine bessere Umgebung wie PLT -Schema, die eine IDE, Debugger und viele Bibliotheken hat. Wenn Sie vorwärts gehen und größere Programme schreiben, benötigen Sie sie.

  2. Der Einzelquote-Charakter ist syntaktischer Zucker für den Ausdruck "Zitat", also ist die Türkei der gleiche wie (Zitat der Türkei). Grundsätzlich macht das "Zitat" den Schema -Bewerter aus. Mit anderen Worten, "Zitat" gibt den Ausdruck wörtlich zurück. Wenn es kein "Zitat" gäbe, würde das Schema versuchen, "Türkei" in der aktuellen Umgebung zu bewerten. Dies ist keine häufige Lisp -Sache, sondern eine Lisp -Sache. Gemeinsames Lisp und Schema sind zwei LISP -Dialekte. Die Verwendung von "Zitat" wird in allen LISP -Tutorials/Büchern erklärt. Sehen Sie auch die Antworten auf diese Frage.

Der Single-Quot-Charakter ist eine Kurzweise, die das Zitat der Form ist, um nur Foo zurückzugeben, ohne es zu bewerten.

Eine Sache, an die man sich in Schema oder einem LISP wirklich erinnern muss, ist, dass alles standardmäßig alles bewertet wird. In Fällen, in denen Sie nicht bewerten möchten, benötigen Sie eine Möglichkeit, dies zu saßen.

Das Zitieren von etwas tut genau dieses und die Single-Quots ist nur weniger Eingabe und führt zu einem weniger ausführlichen Code.

Wenn Sie nach einer besten IDE für suchen scheme Dann gehen Sie für Dr Racket. Aber wenn ich anfange Dr Racket Die erste Zeile sollte sein #lang scheme seit Dr Racket Hat viele Sprache, die wir ausdrücklich erwähnt haben, welche Sprache wir verwenden werden.

Wenn wir selbst ein Argument verabschieden wollen, anstatt den Wert des Arguments zu bestehen, verwenden wir Zitat. Es hängt hauptsächlich mit dem Verfahren zusammen, der während der Verwendung von Listen, Paaren und Atomen, die in der C -Programmiersprache nicht verfügbar sind Und ich denke, Sie können diesen Code verstehen.

(define atom?              ; defining a procedure atom?
(lambda (x)              ; which as one argument x
(and (not (null? x)) (not(pair? x) )))) ; checks if the argument is atom or not
(atom? '(a b c)) ; since it is a list it is false #f

Die letzte Zeile (Atom? 'ABC) ist ABC wie in der Prozedur überprüft, ob ABC ein Atom ist oder nicht, aber wenn Sie (ATOM? ABC) bestehen es. Da wir ihm keinen Wert zur Verfügung gestellt haben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top