Carl Sorensen <c_soren...@byu.edu> writes: > On 8/28/09 10:56 PM, "David Kastrup" <d...@gnu.org> wrote: > >> Carl Sorensen <c_soren...@byu.edu> writes: >> >>> On Aug 28, 2009, at 1:16 PM, "Nicolas Sceaux" <nicolas.sce...@free.fr> >>> wrote: >>> >>>> >>>> According to R5RS, it is an error to modify a literal list. >>>> If a function returns '(), the caller won't be allowed to >>>> apply a modifying function on the result (eg. append!) >>>> >>> >>> IIUC, '() is not a literal list, but a constant that represents the >>> empty list. >> >> It is a literal list in my opinion, but one that happens to have no >> unique and/or modifiable conses. Append will work just fine on it. > > It is *not* a literal list. > > Here is the proof: > > guile> (define a '(4 5)) > guile> (define b '(4 5)) > guile> (eq? a b) > #f > guile> (define c '()) > guile> (define d '()) > guile> (eq? c d) > #t > > > '(4 5) is a literal list, and thus a is not eq? to b, although it is equal? > to b
Huh? What kind of argument is that supposed to be? (define a 4) (define b 4) (eq? a b) Would you claim that 4 is not a literal integer? '() is literal (namely explicitly specified) and it is a list (namely a cons or nil). '() is not a literal _cons_, and it is not unique. But it certainly is literal (a spelled out value) and a list. > On the other hand, c is eq? to d, because '() is a constant, and both c and > d are set to the same constant. I think you are just confused about the meaning of "literal". -- David Kastrup _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-devel