我是 Scheme 的新手,只是对“定义”感到好奇。我见过这样的事情:(define (square x) (* x x))
这是有道理的[函数名'square'输入参数'x']。但是,我发现了一些 90 年代的示例代码,并试图理解:(define (play-loop-iter strat0 strat1 count history0 history1 limit) (~Code for function~)
除了函数名之外,所有这些输入参数吗?
最佳答案
简短的回答 - 是的,第一个符号之后的所有符号都是过程的参数(第一个是过程的名称)。也很高兴指出这一点:
(define (f x y)
(+ x y))
只是语法糖,两种形式是等价的:
(define f
(lambda (x y)
(+ x y)))
一般来说 - 您使用特殊形式
define
为了将名称绑定(bind)到值,该值可以是任何可用的数据类型,包括特定的函数(lambdas)。关于参数和过程定义的更多信息 - 很高兴知道
.
表示法可用于定义具有可变数量参数的过程,例如:(define (f . x) ; here `x` is a list with all the parameters
(apply + x))
(f 1 2 3 4 5) ; 0 or more parameters can be passed
=> 15
最后一招
define
(并非在所有口译员中都可用,但在 Racket 中有效)。定义返回过程的过程的快速快捷方式,如下所示:(define (f x)
(lambda (y)
(+ x y)))
...这相当于这个,更短的语法:
(define ((f x) y)
(+ x y))
((f 1) 2)
=> 3
关于scheme - 在 Scheme 中使用 'define',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15959319/