Again, from my translation of the http://www.lisperati.com/casting.html
tutorial.

I completely lost track at the macro generating macro (defspel game-
action ..

In short, Barski writes a very simple (and neat) text adventure. To
avoid wrong assumtions he doesnt talk about macros but SPELs, using

CL (defmacro defspel (&rest rest) `(defmacro ,@rest))
Clj (defmacro defspel [& rest] `(defmacro ~...@rest))

I translated everything up to the last page 
http://www.lisperati.com/actions.html,
then he arrives at

(defspel game-action (command subj obj place &rest rest)
  `(defspel ,command (subject object)
     `(cond ((and (eq *location* ',',place)
                  (eq ',subject ',',subj)
                  (eq ',object ',',obj)
                  (have ',',subj))
             ,@',rest)
            (t '(i cant ,',command like that.)))))

Without CL knowledge, I dont really understand whats going on, but
gave a try (please dont lough to hard :)

(defspel game-action [command subj obj place & rest]
  `(defspel ~command [subject# object#]
     `(if ((and (= *location* '~'~place)
                  (= '~subject# '~'~subj)
                  (= '~object# '~'~obj)
                  (have '~'~subj))
             ~@'~rest)
            '(i cant ~'~command like that.))))

use

(game-action weld chain bucket attic
         (if ((and (have 'bucket) (alter-var-root (var *chain-welded*) (fn
[_] true)))
                   '(the chain is now securely welded to the bucket.))
                   '(you do not have a bucket.)))

If I try it, I get

spels=> (weld chain bucket)
java.lang.ClassCastException: java.lang.Boolean cannot be cast to
clojure.lang.I
Fn (NO_SOURCE_FILE:0)

And I'm stuck.

My whole try is here: http://paste.lisp.org/+22IH

Many thanks and a good night.

alux

-- 
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
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe from this group, send email to 
clojure+unsubscribegooglegroups.com or reply to this email with the words 
"REMOVE ME" as the subject.

Reply via email to