List ACL2如何保留列表的一部分?
所以我对acl2和lisp还比较陌生,我不知道用lisp做这件事的方法。我怎样才能获得我的评论?(cons a…)我一直在考虑迭代器,但我被告知ACL2只使用递归List ACL2如何保留列表的一部分?,list,recursion,lisp,acl2,List,Recursion,Lisp,Acl2,所以我对acl2和lisp还比较陌生,我不知道用lisp做这件事的方法。我怎样才能获得我的评论?(cons a…)我一直在考虑迭代器,但我被告知ACL2只使用递归 (defun keep-at-most-n-bits (l n) ;cons a (up to n) ) ;;;unit tests. (check-expect (keep-at-most-n-bits '(1 0 1 1) 3) '(1 0 1)) (check-expect (keep-at-most-n-b
(defun keep-at-most-n-bits (l n)
;cons a (up to n)
)
;;;unit tests.
(check-expect (keep-at-most-n-bits '(1 0 1 1) 3) '(1 0 1))
(check-expect (keep-at-most-n-bits '(1 0 1 1) 2) '(1 0))
(check-expect (keep-at-most-n-bits '(1 0 1 1) 8) '(1 0 1 1))
这看起来像是你想要的:
(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
调用自身,每次都会对输入列表的第一个值进行cons'ing。一旦输入列表用尽或n
为0,则函数会反转累加器并返回累加器
现在,需要做的就是使用空累加器启动helper函数
这是Scheme-in-Scheme中相当常见的模式,但是,您可以在所需的函数中定义helper函数。:)我不确定您使用的方言是否支持这种说法,因此我决定这样做以确保安全。:)