【发布时间】:2021-03-31 16:04:12
【问题描述】:
我想在 Lisp 中生成一组所有排列的列表。这是我尝试过的:
(defun ins(e n l)
(cond
((equal n 1) (cons e l))
(T (cons (car l) (ins e (1- n) (cdr l))))
)
)
;; (print (ins '1 1 '(2 3)))
;; (print (ins '1 2 '(2 3)))
;; (print (ins '1 3 '(2 3)))
(defun insert(e n l)
(cond
((equal n 0) nil)
(T (cons (ins e n l) (insert e (1- n) l) ))
)
)
;; (print (insert '1 3 '(2 3)))
(defun inserare(e l)
(insert e (1+ (length l)) l)
)
;(print (inserare '1 '(2 3))) -> ((2 3 1) (2 1 3) (1 2 3))
从这里我无法实现最终的排列函数。我尝试过这样的事情:
(defun perm(L)
(cond
((null L) nil)
(T (append (perm (cdr L)) (inserare (car L) L)))
)
)
但这不是好方法
【问题讨论】:
-
我明白了,但我想以纯递归方式执行此操作,不使用循环。而且这看起来也是一个非常专业的 Lisp 代码,对我来说很难
标签: algorithm recursion functional-programming lisp