LISP-简单函数,语法错误?

标签 lisp common-lisp

我目前正在尝试学习 lisp 并在 Linux 上使用 emacs。尽我所能,我编写了两个函数。

两个函数首先删除列表的第一个元素。

  • series 添加给定列表中的所有元素。
  • 并行 1) 取列表中每个数字的倒数,然后 2)将列表中的所有元素相加,然后 3) 取元素之和的倒数。

代码:

(defun series (lst)
    (apply #'+' (cdr lst)) )

(defun parallel (lst)
    (/ 1 (apply #'+' (apply #'/' (cdr 'lst ) ) ) ))

我可以评估该函数,但是当我尝试使用该函数时,如下所示:

(series (list 3 3 4 5))

我收到错误:值 CDR 不是预期的 NUMBER 类型。 我看到这个,我想,为什么 emacs 将 cdr 视为数字而不是函数? 我是 lisp 和 emacs 的新手,所以我不知道如何修复这个错误。任何帮助将不胜感激。


更新

我在这段代码中遇到了问题,但我认为它有效......

(defun series (lst)
 (apply #'+ (cdr lst) ))

(defun parallel(lst)
(/ 1 (apply #'+ (mapcar #'/ (make-list (- (length lst) 1) :initial-element 1) (cdr lst)  ) )))

希望我想要做的事情现在能够被理解。

最佳答案

额外的撇号会使 LISP 解析器感到困惑。引用 + 函数的语法就是 #'+;没有“关闭报价”。

关于LISP-简单函数,语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10441308/

相关文章:

lisp - 防止 LISP 中的终端输出

lisp - 学习 LISP 的最佳方法是什么?

common-lisp - 惊喜打印到字符串(普通的 lisp)

lisp - 在常见的 lisp 中,你如何在抛出错误但未被捕获的地方重新启动?

lisp - 如何查看 lisp (sbcl) 中函数的定义?

python - 如何使 Web 服务器进行定时多项选择测试?

lisp - 按顺序在单个列表上映射多个函数

assembly - 比较 Common Lisp 中的 List/Make-list 和 Vector/Make-array

recursion - 如何评估递归宏定义

string - 在 CL 中测试列表元素是否为字符串