(sublis alist tree)
は、treeの中のアトムを、alistに従って書き換えるお。
こんな風に。
[4]> (sublis '((one . 1) (two . 2) (three . 3)) '((one plus one) equal two))
((1 PLUS 1) EQUAL 2) [5]> (defun sublis$ (alist tree) (if (atom tree) (if (assoc tree alist) (rest (assoc tree alist)) tree) (cons (sublis$ alist (first tree)) (sublis$ alist (rest tree))))) SUBLIS$ [6]> (sublis$ '((one . 1) (two . 2) (three . 3)) '((one plus one) equal two)) ((1 PLUS 1) EQUAL 2)
トレース。
1. Trace: (SUBLIS$ '((ONE . 1) (TWO . 2) (THREE . 3)) '((ONE PLUS ONE) EQUAL TWO)) 2. Trace: (SUBLIS$ '((ONE . 1) (TWO . 2) (THREE . 3)) '(ONE PLUS ONE)) 3. Trace: (SUBLIS$ '((ONE . 1) (TWO . 2) (THREE . 3)) 'ONE) 3. Trace: SUBLIS$ ==> 1 3. Trace: (SUBLIS$ '((ONE . 1) (TWO . 2) (THREE . 3)) '(PLUS ONE)) 4. Trace: (SUBLIS$ '((ONE . 1) (TWO . 2) (THREE . 3)) 'PLUS) 4. Trace: SUBLIS$ ==> PLUS 4. Trace: (SUBLIS$ '((ONE . 1) (TWO . 2) (THREE . 3)) '(ONE)) 5. Trace: (SUBLIS$ '((ONE . 1) (TWO . 2) (THREE . 3)) 'ONE) 5. Trace: SUBLIS$ ==> 1 5. Trace: (SUBLIS$ '((ONE . 1) (TWO . 2) (THREE . 3)) 'NIL) 5. Trace: SUBLIS$ ==> NIL 4. Trace: SUBLIS$ ==> (1) 3. Trace: SUBLIS$ ==> (PLUS 1) 2. Trace: SUBLIS$ ==> (1 PLUS 1) 2. Trace: (SUBLIS$ '((ONE . 1) (TWO . 2) (THREE . 3)) '(EQUAL TWO)) 3. Trace: (SUBLIS$ '((ONE . 1) (TWO . 2) (THREE . 3)) 'EQUAL) 3. Trace: SUBLIS$ ==> EQUAL 3. Trace: (SUBLIS$ '((ONE . 1) (TWO . 2) (THREE . 3)) '(TWO)) 4. Trace: (SUBLIS$ '((ONE . 1) (TWO . 2) (THREE . 3)) 'TWO) 4. Trace: SUBLIS$ ==> 2 4. Trace: (SUBLIS$ '((ONE . 1) (TWO . 2) (THREE . 3)) 'NIL) 4. Trace: SUBLIS$ ==> NIL 3. Trace: SUBLIS$ ==> (2) 2. Trace: SUBLIS$ ==> (EQUAL 2) 1. Trace: SUBLIS$ ==> ((1 PLUS 1) EQUAL 2) ((1 PLUS 1) EQUAL 2)