Hi all,

what is the best way to write the cls macro in the following example?

Also, why is intern needed in those places?  Could/should not these be
transient symbols which I guess are not interned and still be used as

# based on 

(de cls L
  (let (@C (car L)
        @F (cdr L)
        @A (mapcar '((F) (intern (uppc (car F)))) @F)
        @D (mapcan '((F) (list (intern (uppc (car F))) (cadr F))) @F)
        @S (mapcar '((F) (list '=: (car F) (intern (uppc (car F))))) @F)
        @I (mapcar '((F) (list 'inc (list ':: (car F))
                                    (intern (uppc (car F))))) @F)
        @Pa (list ': (caar @F))
        @Pd (mapcan '((F) (list "," (list ': (car F)))) (cdr @F)))
      (class @C)
      (dm T @A (default . @D) . @S)
      (dm move> @A . @I)
      (dm pput> () (prin "(" @Pa . @Pd) (prin ")")))))

(cls +TwoDeePoint (x 1) (y 2))
(cls +ThreeDeePoint (x 3) (y 4) (z 5))

(de nudge (pt) (move> pt 1 1))

(class +Whatever)
(dm pput> () (prinl "Whatever..."))

(de doPut (obj) (pput> obj) (prinl))

(let (two_d (new '(+TwoDeePoint))
      three_d (new '(+ThreeDeePoint))
      whatev (new '(+Whatever)))
   (doPut two_d) (doPut three_d) (doPut whatev)
   (nudge two_d) (pput> two_d)
   (nudge three_d) (pput> three_d)

I am used to common lisp ` and , notation which builds list templates
by the reader but I am not sure how to do it with similar ease in
picolisp.  I found that functions macro or make deal with this or I
could just build a list and call eval.  However, this does not seem
elegant enough to me.  What is the reason picolist does not have
similar backquote and comma?

Is there a better way of writing the third line (without eval) of the

(de eList (Plural Dlg)
   (<h3> NIL Plural)
   (eval (list 'form 'dialog Dlg)))

(eList "Users" '(choDlg T ,"Users" (nm +User)))

I struggle with calling form the right way as it does not evaluate
its rest/cdr argument which I want to pass in as a "quoted" list.

Thank you,


Reply via email to