【发布时间】: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