很久以前就学会了代码C;想通过Scheme尝试一些新的和不同的东西。我试图创建一个接受两个参数的过程,并返回两者中的较大者,例如
(define (larger x y)
(if (> x y)
x
(y)))
(larger 1 2)
,或者
(define larger
(lambda (x y)
(if (> x y)
x (y))))
(larger 1 2)
我相信这些都是等价的,即如果x> y,返回x;否则,返回y 。
当我尝试其中任何一种时,我都会遇到错误,例如 2不是函数或错误:无法调用:2
我花了几个小时阅读SICP和TSPL,但没有任何东西跳出来(也许我需要使用“列表”并通过 car 和 cdr引用这两个元素?)
任何帮助表示赞赏。如果我错误发帖,错过了之前对同一问题的回答,或者我不道德,我很抱歉。
答案 0 :(得分:1)
原因在于,与C语言和许多其他语言不同,在Scheme和所有Lisp语言中,括号是语法的重要部分。
例如,它们用于函数调用:DAY UNIQUE_CUSTOMERS
------------------- ----------------
2017-01-01 00:00:00 0
2017-01-02 00:00:00 0
2017-01-03 00:00:00 0
2017-01-04 00:00:00 0
2017-01-05 00:00:00 0
2017-01-06 00:00:00 0
2017-01-07 00:00:00 0
2017-01-08 00:00:00 0
2017-01-09 00:00:00 0
2017-01-10 00:00:00 2
2017-01-11 00:00:00 2
2017-01-12 00:00:00 3
2017-01-13 00:00:00 3
2017-01-14 00:00:00 2
2017-01-15 00:00:00 2
2017-01-16 00:00:00 2
2017-01-17 00:00:00 2
2017-01-18 00:00:00 0
2017-01-19 00:00:00 1
2017-01-20 00:00:00 3
2017-01-21 00:00:00 3
2017-01-22 00:00:00 2
2017-01-23 00:00:00 0
2017-01-24 00:00:00 0
2017-01-25 00:00:00 0
2017-01-26 00:00:00 0
2017-01-27 00:00:00 0
2017-01-28 00:00:00 0
2017-01-29 00:00:00 0
2017-01-30 00:00:00 0
2017-01-31 00:00:00 0
表示将(调用)函数(f a b c)
应用于参数f
,a
和b
,而c
表示应用(调用)函数(f)
(不带参数)。
因此,在您的代码中f
表示应用数字(y)
(2
的当前值),但2不是函数,而是数字(如错误消息中所示)
只需将代码更改为:
y