[comp.lang.lisp] How does one quote an atom in Sun CL

hum@cs.mcgill.ca (Herbert HUM) (05/07/91)

I am trying to port a program from a TI Explorer to a Sun running Sun
CL.  In the program, I have a function which given an interned symbol
will generate the quoted version of the symbol.

e.g.:  (quote-atom (intern (concatenate 'string "hello-" "there")))
       would produce the result 'hello-there

The quote-atom function can be written on the Explorer by using the
sys:inhibit-displacing-flag set to 't before a macro is called.

Does anyone know how to code the quote-atom function in Sun CL?
Any help would be greatly appreciated.  Thanks.

Herbert 
hum@cs.mcgill.ca

miller@cs.rochester.edu (05/07/91)

Unless I misunderstand you, some variation of this should work on the 
explorer and any other common lisp:

`(quote ,(intern ...))

Good luck,
-- 
----
Brad Miller             U. Rochester Comp Sci Dept.
miller@cs.rochester.edu {...allegra!rochester!miller}

barmar@think.com (Barry Margolin) (05/07/91)

In article <1991May6.205017.15237@cs.mcgill.ca> hum@cs.mcgill.ca (Herbert HUM) writes:
>e.g.:  (quote-atom (intern (concatenate 'string "hello-" "there")))
>       would produce the result 'hello-there
>
>The quote-atom function can be written on the Explorer by using the
>sys:inhibit-displacing-flag set to 't before a macro is called.
>
>Does anyone know how to code the quote-atom function in Sun CL?
>Any help would be greatly appreciated.  Thanks.

Since Sun CL doesn't do displacing macros (it's generally disallowed in
Common Lisp), I don't think anything special is needed to implement
quote-atom.

(defun quote-atom (atom)
  `(quote ,atom))
-- 
Barry Margolin, Thinking Machines Corp.

barmar@think.com
{uunet,harvard}!think!barmar

charest@ai-cyclops.jpl.nasa.gov (05/08/91)

In article <1991May6.205017.15237@cs.mcgill.ca> hum@cs.mcgill.ca (Herbert HUM)
writes:

>Does anyone know how to code the quote-atom function in Sun CL?
>Any help would be greatly appreciated.  Thanks.
>

The following works as a general purpose quoting function for any LISP datum:

(defun kwote (thing)
  (if (constantp thing)
    thing
    `(quote ,thing)))

-Len Charest

hoey@zogwarg.etl.army.mil (Dan Hoey) (05/08/91)

In article <1991May7.181305.1973@jpl-devvax.jpl.nasa.gov> charest@ai-cyclops.jpl.nasa.gov writes:
>The following works as a general purpose quoting function for any LISP datum:

>(defun kwote (thing)
>  (if (constantp thing)
>    thing
>    `(quote ,thing)))

No.  The CONSTANTP test is incorrect for constants that do not
evaluate to themselves.  For instance (KWOTE 'PI) -> PI fails the
expected (EQL 'PI (EVAL (KWOTE 'PI))).

The traditional way of defining KWOTE is

    (defun kwote (thing) `',thing)

although the alternate definition

    (defun kwote (thing)
      (if (and (constantp thing) (eql thing (eval thing)))
	thing
	`',thing))

is functionally acceptable and arguably preferable.

If you're about to lose your connection, you can try (DEFUN KWOTE
(-\))`',-\))