参数函数,创建inne
此函数使用子列表的每个元素创建(defun fun (L)
(apply 'list (mapcar '(lambda (%) (list %)) L)))
'(1 2 3 -4) --> '((1) (2) (3) (-4))
如何创建分为三个元素之一的函数?
例子:
'(1 2 3 4 5 6 3 3 3 2 2 2) --> '((1 2 3) (4 5 6) (3 3 3) (2 2 2)) 考虑以下通用分组函数:
;; Group by N-Lee Mac
;; Groups a list into a list of lists, each of length n
(defun LM:groupn ( l n / r x )
(repeat (/ (length l) n)
(repeat n
(setq x (cons (car l) x)
l (cdr l)
)
)
(setq r (cons (reverse x) r)
x nil
)
)
(if l (setq r (cons l r)))
(reverse r)
)
_$ (LM:groupn '(1 2 3 4 5 6 3 3 3 2 2 2) 3)
((1 2 3) (4 5 6) (3 3 3) (2 2 2)) 这是一种递归方法,但依赖于AutoLISP的动态范围:
(defun f ( l n )
(if (< n (length l))
(cons (g l n) (f l n))
(list l)
)
)
(defun g ( a b )
(if (< 0 b)
(cons (car a) (g (setq l (cdr a)) (1- b)))
)
)
或者,交叉递归版本:
(defun f ( l n )
(if (< n (length l))
(g l n nil n)
(list l)
)
)
(defun g ( a b c d )
(if (< 0 b)
(g (cdr a) (1- b) (cons (car a) c) d)
(cons (reverse c) (f a d))
)
)
_$ (f '(1 2 3 4 5 6) 2)
((1 2) (3 4) (5 6)) 非常感谢李! “旧”线程:http://www.theswamp.org/index.php?topic=41419.5 ... 尽管有更古老的线索:见李的第二篇文章。
更不用说:http://www.theswamp.org/index.php?topic=5108.0
当然,在某个地方可能有一个更古老的线索,我总是惊讶于实际上只有那么少的“新”事物 我同意-考虑到LISP语言有多么古老,你几乎可以保证在过去的某个时候别人已经做了一些事情
尽管如此,我仍然非常喜欢重新审视这些问题,并尝试想出新的、新颖的方法来解决它们
页:
[1]