home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol166 / eval.lsp < prev    next >
Encoding:
Text File  |  1984-04-29  |  2.1 KB  |  84 lines

  1.  
  2. [EVAL.LSP]
  3. [the LISP function EVAL]
  4. [January 1, 1981]
  5.  
  6.  
  7.  
  8. [ASSOC]
  9. (a ((lambda (0 1)
  10.     (if (eq 0 (car 1)) (cadr 1) (a 0 (cddr 1))))))
  11.  
  12. [EVAL]
  13. (e ((lambda (0 2) (cond
  14.     ((atom 0) (a 0 2))
  15.     ((atom (car 0)) (f (car 0) (cdr 0)))
  16.     ((eq (caar 0) (quote lambda))
  17.         (e (cadr (cdar 0)) (v (cadr (car 0)) (cdr 0))))
  18.         ))))
  19.  
  20. [the most primitive atomic function forms]
  21. (f ((lambda (0 1) (cond
  22.     ((eq 0 (quote car)) (car (e (car 1) 2)))
  23.     ((eq 0 (quote cdr)) (cdr (e (car 1) 2)))
  24.     ((eq 0 (quote cons)) (cons (e (car 1) 2) (e (cadr 1) 2)))
  25.     ((eq 0 (quote atom)) (atom (e (car 1) 2)))
  26.     ((eq 0 (quote eq)) (eq (e (car 1) 2) (e (cadr 1) 2)))
  27.     ((eq 0 (quote quote)) (car 1))
  28.     ((eq 0 (quote if)) (if (e (car 1) 2) (e (cadr 1) 2)
  29.                 (e (car (cddr 1)) 2) ))
  30.     ((and) (g))
  31.     ))))
  32.  
  33. [convenient atomic function forms]
  34. (g ((lambda () (cond
  35.     ((eq 0 (quote and)) (n 1))
  36.     ((eq 0 (quote or)) (o 1))
  37.     ((eq 0 (quote not)) (not (e (car 1) 2)))
  38.     ((eq 0 (quote list)) (l 1))
  39.     ((eq 0 (quote append)) (append (e (car 1) 2) (e (cadr 1) 2)))
  40.     ((eq 0 (quote cond)) (m 1))
  41.     ((and) (h))
  42.     ))))
  43.  
  44. [CAR and CDR composites]
  45. (h ((lambda () (cond
  46.     ((eq 0 (quote caar)) (car (car (e (car 1) 2))))
  47.     ((eq 0 (quote cadr)) (car (cdr (e (car 1) 2))))
  48.     ((eq 0 (quote cdar)) (cdr (car (e (car 1) 2))))
  49.     ((eq 0 (quote cddr)) (cdr (cdr (e (car 1) 2))))
  50.     ((and) (i))
  51.     ))))
  52.  
  53. [service functions]
  54. (i ((lambda () (cond
  55.     ((eq 0 (quote print)) (print (e (car 1) 2)))
  56.     ((eq 0 (quote read)) (read))
  57.     ))))
  58.  
  59. [EVLIS - evaluate a LIST]
  60. (l ((lambda (1)
  61.     (if (null 1) 1 (cons (e (car 1) 2) (l (cdr 1)))) )))
  62.  
  63. [EVCON - evaluate COND]
  64. (m ((lambda (1)
  65.     (if (e (caar 1) 2) (e (car (cdar 1)) 2) (m (cdr 1))) )))
  66.  
  67. [EVAND - evaluate an AND]
  68. (n ((lambda (1)
  69.     (or (null 1) (and (e (car 1) 2) (n (cdr 1)))) )))
  70.  
  71. [EVOR - evaluate an OR]
  72. (o ((lambda (1)
  73.     (and (not (null 1)) (or (e (car 1) 2) (o (cdr 1)))) )))
  74.  
  75. [EVARGS - augment ALIST for LAMBDA]
  76. (v ((lambda (0 1) (if (null 0) 2
  77.     (cons (car 0) (cons (e (car 1) 2) (v (cdr 0) (cdr 1))))
  78.     ))))
  79.  
  80. [main program]
  81. (* (print (e (read) (quote ()))))
  82.  
  83. [end]
  84.