Scheme / Racket:预期变量,但发现一个数字错误

时间:2016-09-18 06:52:36

标签: scheme racket

我在表单中定义了一个函数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期望变量是什么?我已经多次使用这个精确的形式与整数,并没有问题。

3 个答案:

答案 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)

代码中的裸符号(如icons+)是变量。他们评估价值观。对于+,当没有被词法绑定遮蔽时,将评估添加的过程。

(+ a b)是包含3个变量的代码。变量+需要评估一个过程,ab需要评估#<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