【问题标题】:EVAL: undefined function in Common LISP [duplicate]EVAL:Common LISP 中的未定义函数
【发布时间】:2016-08-21 23:08:31
【问题描述】:

我在 CLISP 中定义了一个简单的电源函数:

(defun power(B E)
  (if (= E 1)
      B
      (* B ( power (B (- E 1))))))

但是当我尝试这样调用函数时:

(power 2 6)

我收到以下错误:

*** - EVAL: 未定义函数 B

我在Ideone.com 上尝试了以下代码:

(defun power(B E)
  (if (= E 1)
      B
      (* B ( power (B (- E 1))))))
(setq base (read))
(setq exponent (read))
(print (power(base exponent)))

使用标准输入

2
6

然后,STDERR 再次抛出此错误:

*** - EVAL: 未定义函数 BASE

为什么参数 B 或 BASE 不被视为变量而是函数? 数值是自我评估那么为什么这段代码不起作用?

【问题讨论】:

  • 函数调用怎么写?括号函数 arg0 arg1 ... argn 右括号。正确的?现在(B (- E 1)) 是什么?在我看来像一个函数调用。就像 Lisp 所说的那样。但是 B 是变量而不是函数。所以 Lisp 抱怨。没错。
  • 我不赞成您的问题,因为代码缺少适当的缩进。基本上它根本没有缩进。请编辑您的问题并正确格式化代码。
  • (base exponent) 这也是一个函数调用。不会工作。
  • 如何调用带有两个参数的函数?比如(+ a b)(+ (a b))。你怎么看?
  • @RainerJoswig :作为 LISP 新手,我已经预料到会投反对票 :) 尽管我犯了一个愚蠢的错误,将函数称为 f(x) 而不是 f x 。

标签: lisp common-lisp eval read-eval-print-loop


【解决方案1】:
(defun power (B E)
  (if (= E 1)
    B
    (* B (power B (- E 1)))))

...您不能像使用其他一些编程语言那样在 Lisp 中添加“冗余”括号。

【讨论】:

  • 那真是个愚蠢的错误。
  • @RishbhSharma 与双重命名空间一起是初学者最常犯的错误。
猜你喜欢
  • 1970-01-01
  • 2021-12-26
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2022-11-16
  • 2016-03-05
  • 1970-01-01
相关资源
最近更新 更多