标签: lisp

lisp过滤掉列表中不匹配谓词的结果

我正在尝试学习lisp,使用emacs方言,我有一个问题.让我们说list有一些成员,谓词的评估结果为false.如何在没有这些成员的情况下创建新列表?类似的东西{ A in L: p(A) is true }.在python中有过滤函数,在lisp中是否有相同的东西?如果没有,我该怎么办?

谢谢

lisp elisp predicate list filter

35
推荐指数
4
解决办法
2万
查看次数

为什么Clojure区分符号和变量?

我已经看到了这个问题,但它没有解释我在想什么.

当我第一次从Common Lisp来到Clojure时,我很困惑为什么它将符号和关键字视为单独的类型,但后来我想出来了,现在我觉得这是个好主意.现在我想弄清楚为什么符号和变量是单独的对象.

据我所知,Common Lisp实现通常使用一个结构代表一个"符号",该结构具有1)名称的字符串,2)在函数调用位置计算时指向符号值的指针,3)指向其值时的指针评估外部呼叫位置,以及4)财产清单等.

忽略Lisp-1/Lisp-2的区别,事实仍然是在CL中,"符号"对象直接指向其值.换句话说,CL结合了Clojure在单个对象中称为"符号"和"var"的内容.

在Clojure中,要评估符号,首先必须查找相应的var,然后必须取消引用var.为什么Clojure以这种方式工作?这样的设计可能会带来什么好处?我理解vars有一些特殊属性(它们可以是private,或const,或动态......),但这些属性不能简单地应用于符号本身吗?

lisp symbols clojure

35
推荐指数
5
解决办法
2719
查看次数

将Common Lisp代码移植到Clojure

将Common Lisp应用程序移植到Clojure有多实用?更具体地说,Common Lisp中存在哪些功能在Clojure中不存在,并且必须重新编写?

lisp clojure common-lisp

34
推荐指数
3
解决办法
7756
查看次数

34
推荐指数
6
解决办法
7043
查看次数

函数名中的双减( - )约定在Emacs Lisp中意味着什么

我一直在阅读一些Emacs Lisp软件包,并且遇到了一些函数的约定 - 在库前缀之后,例如:

(defun eproject--combine-regexps (regexp-list)
Run Code Online (Sandbox Code Playgroud)

我想知道这是否是向图书馆声明"私人"功能的惯例,但到目前为止我还没有在Emacs编码指南中找到任何内容.

lisp emacs elisp naming-conventions

34
推荐指数
2
解决办法
1554
查看次数

哪个Scheme IDE有?

我正计划学习Scheme(通过跟随 SICP),然后用这种语言做一个项目.但是,我想知道什么是一个好的IDE呢?我看了一下,但除了叫做埃德温的东西之外,我找不到很多东西?

lisp ide scheme

34
推荐指数
2
解决办法
2万
查看次数

人工智能的Lisp和Prolog?

现在,因为我3年前在AI上课,我非常熟练地提出这个问题......开个玩笑只是开玩笑;)

但严重的是,这些语言是什么使它们如此受人工智能研究的欢迎.即使人工智能研究"老"......它可能是过去5到10年中最长的方式......似乎是因为这些语言在某种程度上"设计"了人工智能的概念,或者仅仅是我们现在没什么好用的?

我问这个是因为我总觉得它非常有趣,我只是有点好奇.如果我完全错了,他们使用不同的语言,我很想知道他们使用的是什么.我的意思是我可以理解prolog,尤其是Sentient/Propositional Logic和Fuzzy逻辑.但我不明白"为什么"我们会使用Lisp ...甚至AI研究人员用来做机器学习等的其他内容.

关于主题的任何文章/书籍也是有帮助的:)

lisp artificial-intelligence prolog

34
推荐指数
5
解决办法
4万
查看次数

Lisp文件扩展名的约定是什么?

".el"是以Emacs Lisp程序结尾的文件名的约定.编写Common Lisp程序时的惯例是什么?

lisp filenames common-lisp pathname

34
推荐指数
2
解决办法
2万
查看次数

什么时候应该使用Emacs#'函数语法?

基本上,我什么时候应该使用Emacs Lisp的function程序?我还没有发现其中有行为上的差异,如果你函数作为参数传递的任何实例'like-this#'like-this.事实上,如果我评估(eq 'goto-char #'goto-char)它返回t.

我遇到的Emacs Lisp代码很少使用function/ #'; 作者只是quote/ '一切.
例:(add-hook 'emacs-lisp-hook 'turn-on-eldoc-mode)

但是,我可以找到一些反例.这是Emacs 24.3源代码中的一个electric.el:

(add-hook 'post-self-insert-hook
          #'electric-indent-post-self-insert-function
          'append)
Run Code Online (Sandbox Code Playgroud)

猜测和进一步的问题:

  • 它只是一个Lisp-2风格大会吗?
  • 它与字节编译有关吗?
  • 这对图书馆作家来说是否有意义?比如,如果您打算在大量环境和Emacs版本下运行您的代码?(推论是如果你只是"dotfile-tinkering"那么你不需要担心这一切.)
  • 什么时候应该引用lambda表达式?我什么时候可以不加引号?
    例如,(do-something '(lambda …
    (do-something (lambda …
  • 在早期版本的Emacs中是否有一些限制,这些限制引起了elisp的这些方面?就像,我可以忽略大多之间的区别'#',只要我使用一个版本的Emacs超过最近X

lisp emacs elisp

34
推荐指数
3
解决办法
3148
查看次数

用于进度报告的惯用语?

我应该如何监控clojure中映射函数的进度?

当用命令语言处理记录时,我经常每隔一段时间打印一条消息,以指示事情已经走了多远,例如报告每1000条记录.基本上这是计算循环重复.

我想知道在clojure中我可以采取什么方法,我将一个函数映射到我的记录序列.在这种情况下,打印消息(甚至保持进度计数)似乎基本上是副作用.

到目前为止我想出的是:

(defn report
  [report-every val cnt]
  (if (= 0 (mod cnt report-every))
    (println "Done" cnt))
    val)

(defn report-progress
  [report-every aseq]
  (map (fn [val cnt] 
          (report report-every val cnt)) 
       aseq 
       (iterate inc 1)))
Run Code Online (Sandbox Code Playgroud)

例如:

user> (doall (report-progress 2 (range 10)))
Done 2
Done 4
Done 6
Done 8
Done 10
(0 1 2 3 4 5 6 7 8 9)
Run Code Online (Sandbox Code Playgroud)

是否有其他(更好)的方法来实现这种效果?

我在做什么有任何陷阱?(我认为我保留了懒惰,而不是举个例子.)

lisp functional-programming clojure imperative-programming

33
推荐指数
2
解决办法
3695
查看次数