Domanda

Sono il giorno 1 ora 1 di insegnare me stesso schema. Inutile dire, io non capisco niente. Così sto leggendo The Little Schemer e l'utilizzo di questa cosa:

  

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

come interprete.

Ho bisogno di usare ' in per esempio

(atom? 'turkey)

per evitare un errore "variabile non definita". Il ', secondo il libro, è una cosa Common Lisp.

Ho due domande:

  1. è l'interprete che ho citato sopra una buona? Mi può consigliare un altro? Ho bisogno di uno che andrà bene con The Little Schemer .

  2. Qual è '?

È stato utile?

Soluzione

La forma 'foo è semplicemente un modo più veloce per digitare l'apposito modulo

(quote foo)

, che è quello di dire,. "Non valutare il nome foo e sostituirlo con il suo valore; voglio dire il nome foo"

Credo SISC è perfettamente bene per esplorare gli esercizi in TLS.

Altri suggerimenti

È necessario comprendere le regole di valutazione di base di Scheme.

prima :

(atom? 'turkey)

La lista è un'applicazione di funzione, in modo atom? viene valutata a una funzione. 'turkey è una breve notazione di mano per (quote turkey). Valutare (quote turkey) dà la turkey simbolo.

Quindi, la prossima la funzione viene applicata alla turkey simbolo e un valore di ritorno viene calcolato.

Secondo

(atom? turkey)

Anche in questo caso abbiamo un'applicazione di funzione e atom? viene valutato a una funzione. Questo turkey il tempo è una variabile. Valutare turkey dà il valore che è destinato ad essa -. Che cosa è mai

Ecco che allora la funzione viene applicata al valore del turkey variabile.

Riepilogo

turkey è una variabile, che viene valutato per il suo valore. 'turkey è (quote turkey), che viene valutato alla turkey simbolo.

Schema riutilizza s-espressioni e costruisce i suoi programmi di s-espressioni. Questo porta al problema che a volte turkey dovrebbe essere una variabile e, talvolta, che dovrebbe essere il simbolo. Questo è un po 'di confusione per il principiante. Dopo qualche tempo vedrete il potere dietro di esso.

SISC è buono, ma un ancor più leggero esecutore Scheme online è http://codepad.org . Non è in realtà un REPL a che non è interattivo, ma è abbastanza vicino. Codice si presenta viene eseguito sul server lato invece di utilizzare un applet browser. E si può condividere il codice che si sta eseguendo URL breve.

Il circa pagina su tastiera codici dice che usa "MzScheme v372 [CGC]".

Io uso tastiera codici per tutti i tipi di test frammento rapido (compresi esempi di codice di prova per SO risposte!).

Per la sintassi citazione, la differenza può essere visto utilizzando il codice in questo modo:

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

Questa mostra:

5
x

Nel primo caso, x viene valutato e passato al display, che stampa 5. Nel secondo caso, il il simbolo x (che non è la stessa cosa di una stringa di caratteri) viene passato a display, che stampa il nome del simbolo.

Stenografia per (quote ...), ' trasforma il codice in dati.

stuff è un simbolo, che significa che può essere un nome di una variabile o il nome di una funzione, ecc ..
'stuff ti dà il simbolo "roba" in sé.

(dostuff "on" those 4 :parameters) quando valutato, correrebbe funzione dostuff con quattro parametri:. Stringa, il contenuto della variabile coloro, numero e parola chiave
'(dostuff "on" those 4 :parameters) quando valutato restituirebbe il codice di cui sopra, che, se valutata, avrebbe a sua volta gestito funzione dostuff con quattro parametri che ..

Ad esempio: Eseguire '''somecode, restituisce ''somecode. Eseguire ''somecode, restituisce 'somecode. Eseguire 'somecode, restituisce somecode. Eseguire somecode, e ... beh ... somecode verrà eseguito.

Si può dire che ' è un po 'come l'opposto di (eval..).

(eval (eval (eval '''(print "hello")))) stamperebbe "Ciao".
(eval (eval (eval ''''(print "hello"))) - notare ancora una ' poi eval - non sarebbe stampare qualsiasi cosa, ma sarebbe restituire il codice (print "hello") stesso !!

Se non fosse che lispers tendono a chiamare che ha restituito il codice (e qualche volta anche il codice scritto a mano) "lista" invece di "codice", per ragioni che saranno sanguinamento evidente come si scava un po 'più in profondità. Buona fortuna :)

  1. Suggerisco che si sposta in un ambiente migliore come PLT Scheme , che ha un IDE, debugger e un sacco di librerie. Mentre ci si sposta in avanti e iniziare a scrivere programmi più grandi, avrete bisogno di loro.

  2. Il carattere singolo-citazione è zucchero sintattico per l'espressione "quote", cosi 'la Turchia è lo stesso (citazione di tacchino). In sostanza, ciò che "quote" fa è quello di spegnere il valutatore Scheme. In altre parole, "quote" restituisce l'espressione, parola per parola. Se non ci fosse "quote", quindi Scheme avrebbe cercato di valutare "la Turchia" nel contesto attuale. Questa non è una cosa Common Lisp, ma una cosa Lisp. Common Lisp e Scheme sono due dialetti Lisp. Gli usi di "quote" sono spiegate in tutti Lisp tutorial / libri. Vedere anche le risposte a questa domanda .

Il carattere singolo-citazione è modo veloce per dire (citazione foo) dove citazione è la forma per tornare solo foo senza valutare esso.

Una cosa da ricordare veramente nello Schema o qualsiasi Lisp per quella materia è che tutto viene valutato per impostazione predefinita. Così, nei casi in cui non si desidera valutare avete bisogno di un modo per sedette questo.

Citando qualcosa fa proprio questo e il single-citazione è solo richiede meno di battitura e porta a codice meno verbose.

Se alla ricerca di un miglior IDE per scheme poi andare per Dr Racket. Ma quando Dr Racket inizio prima linea dovrebbe essere #lang scheme dal Dr Racket ha molti lingua abbiamo esplicitamente menzionare quale lingua ci accingiamo a utilizzare.

Quando vogliamo passare un argomento per sé invece di passare il valore dell'argomento allora usiamo preventivo. E 'in gran parte legato alla procedura di passaggio durante usando liste, le coppie e gli atomi che non sono disponibili nella programmazione linguaggio C (la maggior parte delle persone iniziano la programmazione utilizzando la programmazione C, quindi si ottiene confuso) Questo è il codice in linguaggio di programmazione Scheme, che è un dialetto Lisp e credo che tu possa capire questo codice.

(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

L'ultima riga (atomo? 'Abc) passa abc in quanto è la procedura per verificare se ABC è un atomo o no, ma quando si passa (atomo? Abc) allora controlla per il valore di ABC e passses il valore ad essa. Dal momento che, non abbiamo fornito alcun valore ad esso

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top