I'll add that:

(cond (foo bar) (baz plugh)) => (cond (foo) (bar) (baz) (plugh))

This particular CL difference is listed on the wiki page you listed:

http://en.wikibooks.org/wiki/Clojure_Programming#Clojure_for_Common_Lisp_Programmers

I also didn't have anywhere near these kinds of problems getting things to 
work, although I've been doing a lot of Java lately, and more Scheme than CL, 
so that may have helped.

I'm sure other folks would also be interested in your contributions towards a 
CL => Clojure document; sounds like a good opportunity.

Dave

--- On Sun, 11/16/08, Brian W <[EMAIL PROTECTED]> wrote:
> I'm going to assume this is serious and not a joke, but you do 
> realize Clojure is already quite well documented at clojure.org?
> 
> #t  t     =>     true
> define  defun  =>    defn
> car, cdr, caar, etc.   ~>  first, rest, ffirst, rrest,
> frest, rfirst
> 
> arglists are vectors because [ ] stand out better
> 
> On Nov 16, 2:31 pm, Simon Brooke
> <[EMAIL PROTECTED]> wrote:
> > Has anyone written a very simple introduction to
> Clojure for LISP
> > hackers? I've spend an evening playing with it
> pretty intensively, and
> > thus far I haven't got a thing to work. I've
> readhttp://en.wikibooks.org/wiki/Clojure_Programming#Clojure_for_Common_L...,
> > but it hasn't helped me.
> >
> > In LISP:
> >
> > * (defun fact (n) (cond ((= 1 n) 1)(t (* n (fact (- n
> 1))))))
> > FACT
> > * (fact 10)
> > 3628800
> >
> > that is Common LISP, but what the hell; in Portable
> Standard LISP it
> > would have been identical except 'de' instead
> of 'defun'; in Scheme
> > it's a little different:
> >
> > > (define (fact n) (cond ((= n 1) 1)(#t (* n (fact
> (- n 1))))))
> > > (fact 10)
> >
> > 3628800
> >
> > But the family resemblance is there... So, let's
> try it in Clojure:
> >
> > user=> (defun fact (n) (cond ((= n 1) 1) (t (* n
> (fact (- n 1))))))
> > java.lang.Exception: Unable to resolve symbol: defun
> in this context
> > user=> (de fact (n) ( cond ((= n 1) 1) (t (* n
> (fact (- n 1))))))
> > java.lang.Exception: Unable to resolve symbol: de in
> this context
> > user=> (def fact (n) ( cond ((= n 1) 1) (t (* n
> (fact (- n 1))))))
> > java.lang.Exception: Too many arguments to def
> > user=> (defn fact [n] (cond ((= n 1) 1)(t (* n
> (fact (- n 1))))))
> > java.lang.Exception: Unable to resolve symbol: t in
> this context
> > user=> (defn fact [n](cond ((= n 1) 1)(#t  (* n
> (fact (- n 1))))))
> > java.lang.Exception: No dispatch macro for: t
> > user=> (defn fact [n](cond ((= n 1) 1)(#true (* n
> (fact (- n 1))))))
> > java.lang.Exception: No dispatch macro for: t
> > user=> (defn fact [n] (cond ((= n 1) 1)(true (* n
> (fact (- n 1))))))
> > #'user/fact
> >
> > OK, what's with the funny square brackets? A
> sequence of forms
> > enclosed in square brackets is a vector, not a list.
> Why is the
> > arglist for a function a vector? For now let's
> accept that it is, and
> > pass on.
> >
> > user=> (fact 10)
> > java.lang.ClassCastException: java.lang.Boolean cannot
> be cast to
> > clojure.lang.IFn
> >
> > OK, so that doesn't work. As Zaphod memorably put
> it, 'hey, what is
> > truth, man?' Good question:
> >
> > user=> (true? 'true)
> > true
> > user=> (true? true)
> > true
> > user=> (true? t)
> > java.lang.Exception: Unable to resolve symbol: t in
> this context
> > user=> (true? 't)
> > false
> > user=> (def t 'true)
> > #'user/t
> > user=> (true? t)
> > true
> >
> > OK, now we know the truth, surely we can write a valid
> fact?
> >
> > user=> (defn fact [n] (cond ((= n 1) 1)('true
> (* n (fact (- n 1))))))
> > #'user/fact
> > user=> (fact 10)
> > java.lang.ClassCastException: java.lang.Boolean cannot
> be cast to
> > clojure.lang.IFn
> > user=> (defn fact [n] (cond ((= n 1) 1)((true?
> 'true) (* n (fact (- n
> > 1))))))
> > #'user/fact
> > user=> (fact 10)
> > java.lang.ClassCastException: java.lang.Boolean cannot
> be cast to
> > clojure.lang.IFn
> >
> > OK, it looks like whatever's causing the break
> isn't the guard on the
> > second cond branch. Let's for a moment try
> something that's purely
> > boolean:
> >
> > user=> (defn band [l] (cond ((nil? l) true)((true?
> (car l))(band (cdr
> > l)))))
> > java.lang.Exception: Unable to resolve symbol: cdr in
> this context
> >
> > No CDR? It's LISP, but it can't fetch the
> contents of the decrement
> > register? fifty years of LISP history tossed into the
> dirt. So if the
> > CDR isn't called the CDR, what is it called (and
> what's the CDADR
> > called)?
> >
> > user=> (defn band [l] (cond ((nil? l) true)((true?
> (first l))(band
> > (rest l)))))
> > #'user/band
> > user=> (band '(true true true))
> > java.lang.ClassCastException: java.lang.Boolean cannot
> be cast to
> > clojure.lang.IFn
> >
> > OK, can we write any function at all that works?
> >
> > user=> (defn square [n] (* n n))
> > #'user/square
> > user=> (square 4)
> > 16
> >
> > Fine, so recurse up from that:
> >
> > user=> (defn power [n m] (cond ((= m 0) 1)(true (*
> n (power n (- m
> > 1))))))
> > #'user/power
> > user=> (power 2 2)
> > java.lang.ClassCastException: java.lang.Boolean cannot
> be cast to
> > clojure.lang.IFn
> >
> > Arrrrggghhh...
> >
> > Getting LISP to work seamlessly inside a Java
> environment with easy
> > intercalling between LISP and Java is a very big win,
> and potentially
> > knocks things like JScheme and Armed Bear Common LISP
> into a cocked
> > hat...
> >
> > But it would be nice to be able to get started!
> 
> 

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to