2015-05-26 11 views
7

Sia CL che Schema definiscono (and) per restituire t (o #t) senza argomenti.Nessun argomento (e) restituisce t

Sto cercando di capire la logica di questo. La mia ingenua ipotesi è che un set vuoto sia falso, e passare a zero argomenti è come passare in nulla che possa essere vero.

Modifica: il clojure segue la stessa convenzione. Devo mancare qualche ipotesi di base Lisp.

risposta

17

Il prodotto vuoto è 1. Il motivo è che 1 è un elemento neutro per *.

Se avete il prodotto di 2 e 3 e poi moltiplicare per il prodotto di niente, si otterrà 2 * 3 * 1 = 6. Possiamo scrivere

(product (product 2 3) (product)) 
= (product 6 1) 
= 6 

Lo stesso calcolo con and:

(and (and #t #t) (and)) 
= (and #t ?) 
= #t 

Vogliamo il vuoto (and) per dare un valore ? che non influisce sul risultato. La risposta è #t poiché #t è un elemento neutro.

(and x #t) = x for all boolean x 
+6

E allo stesso modo, un vuoto ** o ** dovrebbe essere falso. In generale, se si sta generalizzando un operatore binario come n-ario, è utile che il caso 0-ary restituisca l'elemento identificativo dell'operatore. –

+11

Il termine per questo è "identità". Zero è l'identità additiva, una è l'identità moltiplicativa. Per logica e, l'identità è vera, e per logica o, l'identità è falsa. –

+0

C'è uno sfondo nel [prodotto vuoto] (http://en.wikipedia.org/wiki/Empty_product) articolo di Wikipedia – ez121sl

7

Ecco una risposta più intuitiva: una "e" è come una lista di controllo: si è "fatto" (vale a dire, vero) quando tutte le cose sulla lista sono vere. Supponiamo che qualcuno ti abbia dato una lista di controllo vuota; in tal caso, non hai nulla da spuntare e sei banalmente fatto.

4

Ecco il mio tentativo di metterlo il più semplice possibile: Un'espressione and è falsa se e solo almeno uno dei suoi argomenti è falso, altrimenti è vero. Quindi è banalmente vero se non ci sono argomenti.

Problemi correlati