2012-01-25 20 views
11

Poiché (lista 1 2 3) rese (1 2 3) e (quota (1 2 3)) rese (1 2 3), qual è la motivazione per averli entrambi?Perché Scheme ha sia la lista che il preventivo?

Poiché Scheme è altrimenti così di riserva, questi devono avere qualche differenza significativa. Cos'è quello?

+0

"Poiché Scheme è altrimenti così di riserva" - Potresti essere interessato a sapere che 'list' è in realtà una forma derivata che può essere definita da Scheme stesso:' (define (list. Objs) objs) ' –

risposta

27

Nell'esempio che ha citato quote e list si ottiene lo stesso risultato perché le costanti numeriche si valutano da sole. Se si utilizzano le espressioni che non sono auto-valutando nella lista (diciamo variabili o chiamate di funzione), si vedrà la differenza:

(quote (a b c)) vi darà una lista che contiene i simboli a, b e c mentre (list a b c) volontà darti una lista contenente i valori delle variabili a, b e c (o un errore se le variabili non esistono).

+0

OK I see quella. Grazie. – drb

5

L'elenco crea un elenco, quindi (elenco 1 2 3) crea un elenco di tre elementi.

La citazione impedisce la valutazione. Senza citazione, l'espressione (1 2 3) sarebbe valutata come la funzione 1 chiamata con gli argomenti 2 e 3, che ovviamente non ha senso. Il preventivo impedisce la valutazione e restituisce semplicemente la lista, che è specificata letteralmente nella sua forma stampabile esterna come (1 2 3).

Problemi correlati