Page 1 of 1

cons

Posted: Sun Jul 22, 2012 10:53 am
by Ehsan
Hi every . i have question about cons in lisp . how can i make this list
(1 (4 9 (12) ))

i used this rule (cons 1 (cons (cons 4 (cons 9 (cons (cons 12()))) ()) ())) but interpreter return error :(

Re: cons

Posted: Sun Jul 22, 2012 6:07 pm
by nuntius
I think the main issue is that the empty list must be written as '(). If you write (), then it will try to evaluate the function with no name.

In Common Lisp, '() can also be written as nil.

Re: cons

Posted: Mon Jul 23, 2012 2:26 am
by Ehsan
tnx . i found how to build a nested list

Re: cons

Posted: Mon Jul 23, 2012 12:40 pm
by saulgoode
Even if unquoted empty lists were recognized, the following part of your expression is not a pair:

Code: Select all

(cons (cons 12 ()) )

Re: cons

Posted: Mon Jul 23, 2012 1:29 pm
by Kompottkin
Actually, in Common Lisp, () is equivalent to (reads as) NIL, which is self-evaluating, so it's a completely legitimate way of writing the empty list. (Which does not mean it isn't stylistically questionable.)

Re: cons

Posted: Tue Jul 24, 2012 5:00 pm
by sylwester
Ehsan wrote:Hi every . i have question about cons in lisp . how can i make this list
(1 (4 9 (12) ))

i used this rule (cons 1 (cons (cons 4 (cons 9 (cons (cons 12()))) ()) ())) but interpreter return error :(
Maybe it's easier to compose it with list first eg.

Code: Select all

(list 1 (list 4 9 (list 1 2)))
Then (list a b c) is an abbrivation for (cons a (cons b (cons c NIL)))
So translating the first list would get you:

Code: Select all

(cons 1(cons (list 4 9 (list 1 2)) NIL))
Then do the same with the rest. Note that I'm using NIL here to keep away the the extra parenthesis. If you're using Scheme you need to use '()
It's quite difficult to get it right so before list and quasiquoting it must have been a source of many errors :)

nuntius wrote:I think the main issue is that the empty list must be written as '(). If you write (), then it will try to evaluate the function with no name.
This is true for Scheme. The empty list needs to be quoted since it cannot be evaluated.
nuntius wrote: In Common Lisp, '() can also be written as nil.
For Common Lisp quoting is optional. (), NIL, '() and 'NIL evaluates to NIL.

Re: cons

Posted: Wed Jul 25, 2012 11:46 am
by Ehsan
tnx everyone . I created this instruction , but this is very confusing :D

(cons 1 (cons (cons 2 (cons 6 (cons 7 (cons 8 ()))))(cons 3 ( cons (cons 4 (cons 9 (cons (cons 12())())))(cons(cons 5(cons 10 (cons 11()))) ())))))


(1 (2 6 7 8) 3 (4 9 (12)) (5 10 11))