干杯
我推荐李·麦克的这篇教程。
他在那里写的第一句话非常准确:
这本教程很棒,但你必须足够注意,并进行大量练习。
但一旦你习惯了,我基本上你已经学会了60%的LISP。
顺便说一句,这里有一些更通用的函数:
- ; Numbers all string keys in Assoc List
- (defun NumberStrKeys ( aL / keys )
- (cond
- ( (not (and (vl-consp aL) (vl-every 'vl-consp aL))) (prompt "NumberStrKeys: Invalid list.") )
- (
- (mapcar
- (function
- (lambda (L / k tmp i )
- (if (eq 'STR (type (setq k (car L))))
- (if (setq tmp (assoc k keys))
- (if (setq i (cdr tmp))
- (progn
- (setq keys (subst (cons k (setq i (1+ i))) tmp keys))
- (cons (strcat k "-" (itoa i)) (cdr L))
- ); progn
- (progn (setq keys (cons (cons k 0) keys)) L)
- ); if
- (progn (setq keys (cons (cons k 0) keys)) L)
- ); if
- L
- ); if
- ); lambda
- ); function
- aL
- ); mapcar
- )
- ); cond
- ); defun NumberStrKeys
示例用法和输出:
- (NumberStrKeys
- '(
- (1 "1" (-3.06162e-017 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("Circle" "6" (-3.06162e-017 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("Circle" "5" (-3.06162e-017 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("Circle" "4" (-3.06162e-017 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- (2 "2" (-3.06162e-017 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("RECTAN" "2" (-3.06162e-017 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("SQUARE" "3" (-3.06162e-017 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("SQUARE" "2" (-3.06162e-017 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("Circle" "3" (-3.06162e-017 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("Circle" "2" (-3.06162e-017 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- (3 "3" (-3.06162e-017 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("SQUARE" "1" (-3.06162e-017 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("Circle" "1" (-3.06162e-017 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("RECTAN" "1" (-3.06162e-017 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- )
- )
- >>
- (
- (1 "1" (-3.06162e-17 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("Circle" "6" (-3.06162e-17 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("Circle-1" "5" (-3.06162e-17 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("Circle-2" "4" (-3.06162e-17 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- (2 "2" (-3.06162e-17 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("RECTAN" "2" (-3.06162e-17 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("SQUARE" "3" (-3.06162e-17 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("SQUARE-1" "2" (-3.06162e-17 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("Circle-3" "3" (-3.06162e-17 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("Circle-4" "2" (-3.06162e-17 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- (3 "3" (-3.06162e-17 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("SQUARE-2" "1" (-3.06162e-17 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("Circle-5" "1" (-3.06162e-17 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- ("RECTAN-1" "1" (-3.06162e-17 -0.5 0.0) 1.0 10 (0.0 0.0 0.0))
- )
|