Annotation of 42BSD/ucb/lisp/pearl/symord.l, revision 1.1

1.1     ! root        1: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; symord.l ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        !             2: ; Functions for defining symbols and ordinal types.
        !             3: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        !             4: ; Copyright (c) 1983 ,  The Regents of the University of California.
        !             5: ; All rights reserved.  
        !             6: ; Authors: Joseph Faletti and Michael Deering.
        !             7: 
        !             8: ; Define one SYMBOL in a hunk for easy identification.
        !             9: ;   This will not work independently (for some reason).
        !            10: (dm onesymbol (none)
        !            11:   '(funl (symname)
        !            12:         (or (and (not (litatom symname))
        !            13:                  (not (msg t "SYMBOL: Symbols can only be simple names, not:"
        !            14:                            symname t)))
        !            15:             (and (eq symname 'nilsym)
        !            16:                  (boundp (symatom 'nilsym))
        !            17:                  (not (msg t "SYMBOL: Cannot redefine nilsym." t)))
        !            18:             (and (null symname)
        !            19:                  (not (msg t "SYMBOL: Cannot name a symbol nil." t)))
        !            20:             (and (symbolnamep symname)
        !            21:                  ; but okay to do.
        !            22:                  (and *warn*
        !            23:                       (msg t "SYMBOL: Warning: Redefining symbol: "
        !            24:                            symname t)))
        !            25:             (let ((block (set (symatom symname) (makhunk 3))))
        !            26:                  (putuniquenum (newnum) block)
        !            27:                  (puttypetag '*pearlsymbol* block)
        !            28:                  (putsymbolpname symname block)
        !            29:                  block))))
        !            30:  
        !            31: ; Define a bunch of SYMBOLS.
        !            32: (df symbol (l)
        !            33:   (mapcar (onesymbol) l))
        !            34: 
        !            35: ; An EXPR which allows the defining of one SYMBOL.
        !            36: (de symbole (symname)
        !            37:   (cond ((not (litatom symname))
        !            38:         (msg t "SYMBOLE: symbols can only be simple names, not: "
        !            39:              symname t)
        !            40:         (pearlbreak))
        !            41:        (  t  (apply* (onesymbol) (ncons symname)) symname)))
        !            42:  
        !            43: (de getsymbol (symname)
        !            44:   (cond ((symbolnamep symname)
        !            45:         (eval (symatom symname)))
        !            46:        (  t  (msg t "GETSYMBOL: " symname " is not the name of a symbol." t)
        !            47:              (pearlbreak))))
        !            48:  
        !            49: ; (ordinal name (x y z)) or  (ordinal name (x 1 y 3 z 8)).
        !            50: ; Define a set of integer constants for readability in input and output.
        !            51: ; Also define o:name, name:max and name:min, and name:x, name:y and name:z.
        !            52: (df ordinal (l)
        !            53:   (let ((ordinalname (car l))
        !            54:        (ordinalelements (cadr l))
        !            55:        (alist (ncons nil))
        !            56:        (count 0)
        !            57:        (min 0)
        !            58:        max
        !            59:        name
        !            60:        value)
        !            61:        (push ordinalname *ordinalnames*)
        !            62:        (set (ordatom ordinalname)
        !            63:            (cond ((not (numberp (cadr ordinalelements)))
        !            64:                   ; generate numbers.
        !            65:                   (while ordinalelements
        !            66:                          (setq count (1+ count))
        !            67:                          (tconc alist (cons (setq name (pop ordinalelements))
        !            68:                                             count))
        !            69:                          (set (concat ordinalname ":" name) count))
        !            70:                   (or (\=& 0 count)
        !            71:                       (setq min 1))
        !            72:                   (setq max count)
        !            73:                   (car alist))
        !            74:                  ; use numbers provided by user.
        !            75:                  ( t (setq min (setq max (cadr ordinalelements)))
        !            76:                      (while ordinalelements
        !            77:                             (tconc alist
        !            78:                                    (cons (setq name (pop ordinalelements))
        !            79:                                          (setq value (pop ordinalelements))))
        !            80:                             (set (concat ordinalname ":" name) value)
        !            81:                             (and (<& value min)
        !            82:                                  (setq min value))
        !            83:                             (and (>& value max)
        !            84:                                  (setq max value)))
        !            85:                      (car alist))))
        !            86:        (set (concat ordinalname ":min") min)
        !            87:        (set (concat ordinalname ":max") max)
        !            88:        (cons ordinalname (car alist))))
        !            89:  
        !            90: 
        !            91: ; vi: set lisp:

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.