HELP POPTOLISP                                  Jon Cunningham, Oct 1984

This file provides a list of sample translations from Pop-11 to Poplog
Common Lisp. It is intended as quick reference reminder for Pop-11 users
learning Lisp (or Lisp users learning Pop-11), and should be used in
conjunction with a more detailed source. For information on how to run
Lisp, read HELP * CLISP. HELP * LISPVED explains how to prepare Lisp
programs using the VED editor. Details of the Lisp/Pop-11 mixed language
interface can be found in HELP * POPLISP.


         CONTENTS - (Use <ENTER> g to access required sections)

  1   Things to Avoid
  2   Comments
  3   Upper and Lower Case Letters
  4   Quotes
  5   Translation Summary


-----------------------------------------------------------------------
1  Things to Avoid
-----------------------------------------------------------------------

The characters # . , @ and : all have special meanings in Common Lisp.
Don't use them unless you know what you're doing.


-----------------------------------------------------------------------
2  Comments
-----------------------------------------------------------------------

The Lisp end-of-line comment character is the same as Pop-11's, (the
semi-colon ";"), so you can comment programs in exactly the same way.
Bracketed comments are notated using #| and |#.


-----------------------------------------------------------------------
3  Upper and Lower Case Letters
-----------------------------------------------------------------------

Remember that lower case input is automatically translated to upper case
(except within a string). Thus

    == 'hello
    == 'HELLO
    == 'Hello
    == 'helLO

are all equivalent.


-----------------------------------------------------------------------
4  Quotes
-----------------------------------------------------------------------

The quote notation, has two forms: forward quote ', and back quote `.
Although the forward quote is the "standard" quote, which you will see
in text books, only the back-quote form allows the use of "comma"
notation. This is like "up-arrow" in Pop-11: examples are shown in the
section below. There are also other more subtle differences between
forward and back quote.


-----------------------------------------------------------------------
5  Translation Summary
-----------------------------------------------------------------------

Here are some examples of functionally similar Pop-11 and Lisp
expressions:

         Pop-11                            Lisp
  ----------------------            ---------------------

  proc(arg1, arg2, arg3)    -->     (proc arg1 arg2 arg3)

                  proc()    -->     (proc)

                      []    -->     nil

                    true    -->     t

                  a :: b    -->     (cons a b)

                  a <> b    -->     (append a b)

                   a = b    -->     (equalp a b)

                  a == b    -->     (eq a b)

                  a = []    -->     (null a)

                   a + b    -->     (+ a b)

                  x -> y    -->     (setq y x)

              'Hi there'    -->     "Hi there"

                   "oof"    -->     'oof

               [foo baz]    -->     '(foo baz)

    [% foo, baz, grum %]    -->     (list foo baz grum)

        [% "foo", baz %]    -->     (list 'foo baz)

              [foo ^baz]    -->     `(foo ,baz)

        [foo ^^baz grum]    -->     `(foo ,@baz grum)

                hd(list)    -->     (car list)

                tl(list)    -->     (cdr list)

        hd(tl(tl(list)))    -->     (caddr list)

               {foo baz}    -->     #(foo baz)

        {% "foo", baz %}    -->     (vector 'foo baz)

              {foo ^baz}    -->     `#(foo ,baz)


   if c then s                 -->  (if c s)
   endif

   if c then s                 -->  (if c s s1)
   else s1
   endif

   if c1 then s1               -->  (cond
   elseif c2 then s2                    (c1 s1)
   elseif c3 then s3                    (c2 s2)
   else s4                              (c3 s3)
   endif                                (t s4))

   until c do s enduntil    -->     (loop until c do s)

   while c do s endwhile    -->     (loop while c do s)

   for item in list do      -->     (dolist (item list) s)
      s
   endfor

   [% for item in list do   -->     (loop for item in list
        s                            collect s)
   endfor %]

   for i from 0 to n do     -->     (dotimes (i n) s)
       s
   endfor

   define greet(name);      -->     (defun greet (name)
       [hello ^name] =>                 (print `(hello ,name)))
   enddefine;



--- C.all/lisp/help/poptolisp
--- Copyright University of Sussex 1987. All rights reserved.
