首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ACL2如何保存列表的一部分?

ACL2如何保存列表的一部分?
EN

Stack Overflow用户
提问于 2018-10-18 16:59:32
回答 1查看 93关注 0票数 1

所以我对acl2和lisp还比较陌生,我不知道用lisp做这件事的方法。我怎样才能达到我的评价呢?(缺点a.)我一直在考虑迭代器,但有人告诉我ACL2只使用递归

代码语言:javascript
复制
(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))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-18 17:17:33

看起来它能做你想做的事:

代码语言:javascript
复制
(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,则函数将反转累加器并返回它。

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

这是Scheme - in Scheme中相当常见的模式,但是,您可以在需要它的函数中定义助手函数。:)我不确定你所使用的方言是否支持这一点,所以我决定像这样谨慎行事。:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52879049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档