所以我对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-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 第一-n n 为0,则函数反转累加器并返回它。
first-n
acc
第一-n
n
现在,所有 keep-at-most-n-bits 需要做的是用一个空的累加器启动helper函数。
keep-at-most-n-bits