我有一个函数计算与可选参数二项式扩展到指定起止期限:当我编译的Common Lisp让结合
(defun comb-index (s k)
(let ((combinations nil))
(labels ((rec (s k offset entry)
(cond ((equal s k)
(push (reverse (loop
for i from 1 to s
do (push (1- (+ i offset)) entry)
finally (return entry)))
combinations))
((equal k 0)
(push (reverse entry) combinations))
(t (rec (1- s) (1- k) (1+ offset) (cons offset entry))
(rec (1- s) k (1+ offset) entry)))))
(rec s k 0 nil))
(nreverse combinations)))
(defun binomial (k &key (start 1) end)
(let ((b start)
(e (if (null end) k end)))
(labels ((rec (i)
(cond ((equal i e)
(comb-index k e))
(t
(append (comb-index k i) (rec (1+ i)))))))
(rec b))
)
)
,并运行此代码,它会产生以下运行时错误:
Unhandled memory fault at #x18.
[Condition of type SB-SYS:MEMORY-FAULT-ERROR]
这是由e引起的,但我不知道为什么。我可以通过给'e'分配'k'或'end'来避免这个问题,或者简单地使用(when ...)将'end'设置为'k',如果它是零,但我不知道为什么这不起作用。
什么是comb-index? –
@Vijay这是我用来计算(S k)组合的另一个函数,我将它添加到问题中。 – sudo
你如何运行代码?你用什么参数调用函数? –