我开始学习Scheme了,我正在尝试实现我自己的max函数,它只给出两个参数的最大值。
我写了这样的函数:
(define (myMax x y) (cond ((> x y) (x)) ((< x y) (y))))
但是每当我尝试调用(myMax 100 40)
时(例子)我都会收到一条错误消息:
The object 100 is not applicable.
搜索GNU的MIT-Scheme文档,他们说:
This type indicates an error in which a program attempted to apply an object that is not a procedure. The object being applied is saved in the datum field, and the arguments being passed to the object are saved as a list in the operands field.
但那应该是什么意思呢?
奇怪的是,我实现了一个非常简单的函数,它添加了两个数字,它工作正常,也是一个绝对值函数,工作正常;难道有条件的搞砸了吗?
谢谢
答案 0 :(得分:11)
在Scheme (function-name arguments)
中是将函数应用于给定参数的语法。所以(x)
表示“将函数x
应用于无参数”。但是x
不是一个函数,编译器试图告诉你它不是“适用”。
由于您实际上并不想应用x
,只需删除它周围的括号即可。 (y)
的其他情况下cond
也是如此。