当前位置:  开发笔记 > 编程语言 > 正文

常见的lisp习语 - 有更好的方法吗?

如何解决《常见的lisp习语-有更好的方法吗?》经验,为你挑选了2个好方法。

我发现自己一直在做这种事情.我一直在考虑编写一个宏/函数来使这种事情更容易,但我发现我可能正在重新发明轮子.

是否有现有的功能可以让我更简洁地完成同样的事情?

(defun remove-low-words (word-list)   
  "Return a list with words of insufficient score removed."
  (let ((result nil))
    (dolist (word word-list)  
      (when (good-enough-score-p word) (push word result)))                                      
    result))  

Luís Oliveir.. 22

有几种内置的方法可以做到这一点.一种方法是:

(remove-if-not 'good-enough-score-p word-list)

而另一个:

(loop for word in word-list  
      when (good-enough-score-p word)
      collect word)

而另一个:

(mapcan (lambda (word)
          (when (good-enough-score-p word)
            (list word)))
        word-list)

等等......还有SERIES和Iterate.Iterate版本与LOOP版本相同,但SERIES版本很有趣:

(collect (choose-if 'good-enough-score-p (scan word-list))))

所以,是的,你很可能会重新发明一些轮子.:-)



1> Luís Oliveir..:

有几种内置的方法可以做到这一点.一种方法是:

(remove-if-not 'good-enough-score-p word-list)

而另一个:

(loop for word in word-list  
      when (good-enough-score-p word)
      collect word)

而另一个:

(mapcan (lambda (word)
          (when (good-enough-score-p word)
            (list word)))
        word-list)

等等......还有SERIES和Iterate.Iterate版本与LOOP版本相同,但SERIES版本很有趣:

(collect (choose-if 'good-enough-score-p (scan word-list))))

所以,是的,你很可能会重新发明一些轮子.:-)



2> Nathan Shive..:

您想要的功能remove-if-not是内置的.

(defun remove-low-words (word-list)
  (remove-if-not #'good-enough-score-p word-list))

如果你觉得你正在重新发明与列表有关的东西,你可能就是这样.检查Hyperspec以查看.

关于Hyperspec的文档 remove-if-not

所有序列功能

所有特定于列表的功能

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有