具有2个参数的Scheme过程

时间:2017-02-16 09:41:54

标签: scheme mit-scheme

很久以前就学会了代码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引用这两个元素?)

任何帮助表示赞赏。如果我错误发帖,错过了之前对同一问题的回答,或者我不道德,我很抱歉。

1 个答案:

答案 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)应用于参数fab,而c表示应用(调用)函数(f)(不带参数)。

因此,在您的代码中f表示应用数字(y)2的当前值),但2不是函数,而是数字(如错误消息中所示)

只需将代码更改为:

y