代码之家  ›  专栏  ›  技术社区  ›  William Machado

ACL2如何保留列表的一部分?

  •  1
  • William Machado  · 技术社区  · 8 年前

    所以我对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))
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Ashton Wiersdorf Mike Nakis    8 年前

    (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,则函数反转累加器并返回它。

    现在,所有 keep-at-most-n-bits 需要做的是用一个空的累加器启动helper函数。

    推荐文章