Syntax Scheme(DrRacket)语法-括号

Syntax Scheme(DrRacket)语法-括号,syntax,scheme,racket,parentheses,Syntax,Scheme,Racket,Parentheses,让我们看一下以下函数: (define Increment1 (λ(x)(+ x 1))) (define (Increment2) (define (inc2 x)(+ x 1)) inc2) 它们都返回递增x的函数 问题1: 鉴于代码: (define Func Increment2) (Func 2) 为什么我会出错?预期参数数=0,给定参数数=1, 而代码 (define Func2 (Increment2)) (Func2 2) 将工作,并将返回一个3。为什么呢

让我们看一下以下函数:

(define Increment1 (λ(x)(+ x 1)))
(define (Increment2)
    (define (inc2 x)(+ x 1))
    inc2)
它们都返回递增x的函数

问题1: 鉴于代码:

(define Func Increment2)
(Func 2)
为什么我会出错?预期参数数=0,给定参数数=1, 而代码

(define Func2 (Increment2))
(Func2 2)
将工作,并将返回一个3。为什么呢

问题2:为什么用lambda定义函数时,不需要用括号括起来?案例增量1 另一方面,当不使用lambda时,为什么要用括号将函数名括起来?案例增量2

问题3:让我们定义一个函数定义Func3λF xF x

为什么Func3 Increment1 2会工作,而Func3 Increment2 2会失败?与问题1中的错误相同

谢谢。

Increment2是一个返回值为函数的函数。因此,您需要调用Increment2来获取其返回值,这是一个函数

查看您的第二个列表:

(define Func2 (Increment2))
(Func2 2)
我们注意到Func2是Increment2的返回值,Increment2是一个函数。所以你可以叫它。所以Increment2指向一个接受0个参数的函数,但是调用它会返回一个接受一个参数的函数

-

对于第二个问题,lambda是一个匿名函数。因此,define Func3λF xF x是一个变量定义,将变量Func3绑定到一个匿名函数,因此,命名它,它将作为一个正则函数

事实上,您刚刚发现定义有趣的参数。。。语法是将变量绑定到匿名函数的语法糖

-

至于你的第三个问题,如果你理解我对第一个问题的回答,你应该能够回答