所以我对acl2和lisp仍然相对较新,我不知道在lisp中这样做的方法。我怎样才能实现我的评论?(缺点……)我一直在想迭代器,但我只被告知ACL2 ……
这看起来像你想要的:
(defun first-n (lst n acc) (if (or (= n 0) (eq lst nil)) (reverse acc) (first-n (cdr lst) (- n 1) (cons (car lst) acc)))) (defun keep-at-most-n-bits (l n) (first-n l n '()))
这通过创建辅助功能来工作( first-n )取一个累加器变量。 ( acc ) first-n 每次调用输入列表的第一个值时调用自身。一旦输入列表用尽或 n 为0,然后该函数反转累加器并返回它。
first-n
acc
n
现在,所有 keep-at-most-n-bits 需要做的是使用空累加器触发辅助函数。
keep-at-most-n-bits
这是Scheme中Scheme的一个相当常见的模式,但是,你可以在你需要的函数中定义辅助函数。:)我不确定你使用的方言是否支持这个,所以我决定像这样安全地玩。 :)