我在表单中定义了一个函数name
(define (name x y z) (function...))
我使用参数name
int1
int2
拨打int3
这样的新行。
(define (name int1 int2 int3))
由于某种原因,我收到错误消息:
define: expected a variable, but found a number.
我是该语言的新手(球拍/方案)所以我想知道Dr.Racket期望变量是什么?我已经多次使用这个精确的形式与整数,并没有问题。
答案 0 :(得分:1)
以下是如何定义函数以及如何在定义后使用它的示例。
(define (add-them x y z) ; note x, y, and, z must me names
(+ x y z))
(add-them 1 2 3) ; no define when add-them is used.
结果是6。
答案 1 :(得分:0)
代码中的裸符号(如i
,cons
和+
)是变量。他们评估价值观。对于+
,当没有被词法绑定遮蔽时,将评估添加的过程。
(+ a b)
是包含3个变量的代码。变量+
需要评估一个过程,a
和b
需要评估#<procedure:+>
期望的类型。
如果你把括号放在C +(1 2)
中,那么这就是两个表达式。第一个+
计算过程,但未使用该值,下一个表达式(1 2)
显然是一个错误,因为1
不是一个过程。
答案 2 :(得分:0)
尽管这是一个月前的帖子,但我认为这是一个答案
首先,您已定义了函数name
:
(define (name x y z) (function...))
现在您已尝试拨打name
:
(define (name int1 int2 int3))
这里发生的事情是球拍首先看到define
,并认为你正在定义一些东西。这可以是函数或变量。 (他们在球拍上有相似之处。)然后它移动到(name int1 int2 int3)
。请注意,这是一个函数调用,它执行上面定义的任何操作。在这种情况下,我假设您已定义函数name
以返回数字。所以现在我们正在考虑(define some_number)
。这是什么意思?球拍不太确定,因为它期待变量名称
下面两个中的任何一个都应该起作用:
(define some_number (name int1 in2 int3)) //It defines `some_number` as whatever the result of the function call is.
(name int1 int2 int3) // simply calls the function with the arguments int1 int2 int3