为什么这个racket函数需要一个参数?它是如何工作的? 我是初学球拍的,下面的代码来自华盛顿大学的球拍编程课程—— (define s "hello") (define (pow1 x y) (if(= y 0) 1 (* x (pow1( - y 1))))) (define pow2 (lambda(x) (lambda(y) (pow1 x y)))) (define three (pow2 3))
从我所读到的内容来看,在Racket中传递参数的格式应该是-为什么这个racket函数需要一个参数?它是如何工作的? 我是初学球拍的,下面的代码来自华盛顿大学的球拍编程课程—— (define s "hello") (define (pow1 x y) (if(= y 0) 1 (* x (pow1( - y 1))))) (define pow2 (lambda(x) (lambda(y) (pow1 x y)))) (define three (pow2 3)),lambda,functional-programming,lisp,racket,Lambda,Functional Programming,Lisp,Racket,从我所读到的内容来看,在Racket中传递参数的格式应该是- (define (id id id) expression) 为什么它不适用于三年?三个是如何工作的 EDIT1-当我运行(pow1 2)时,我得到一个错误,表示给定的参数数为1,当我编写(pow1 2 3 4)时,它表示参数数为3。发生了什么事 (define pow2 (lambda(x) (lambda(y) (pow1 x y)))) 这将pow2定义为某种lambda表达式 (define thr
(define (id id id) expression)
为什么它不适用于三年?三个是如何工作的
EDIT1-当我运行(pow1 2)
时,我得到一个错误,表示给定的参数数为1,当我编写(pow1 2 3 4)
时,它表示参数数为3。发生了什么事
(define pow2
(lambda(x)
(lambda(y)
(pow1 x y))))
这将pow2
定义为某种lambda
表达式
(define three (pow2 3))
这将三个定义为(pow2 3)
的结果。什么是(pow2 3)
?好吧,让我们内联pow2
的值:
(pow2 3)
; inline pow2
((lambda(x)
(lambda(y)
(pow1 x y)))
3)
将lambda(参数x
)应用于值(例如3
)可替换lambda主体中的值(即,我们可以用3
替换x
):
现在这是three
的值
执行(三个2)
的过程如下:
(three 2)
; inline three
((lambda(y)
(pow1 3 y))
2)
; apply lambda
(pow1 3 2)
。。。从那以后,只需调用pow1
我很确定(定义s“hello”)
只需定义一个变量s
(如“hello”
)。这不是一个函数。类似地,三个
将绑定到(pow2 3)
的结果。我的坏消息。我不是在问s。我只是想知道三个会怎样执行。(三个2)返回9,但为什么?注意,(define(id)expression)
只是(define id(lambda(id)expression))的缩写。
。值得知道的一点是,(define(x…)
是的语法缩写(define x(lambda(…)
在Racket(以及更一般的Scheme)中)因此,pow2
可以定义为(define(pow2 x)(lambda(y)(pow1 x y))
,这可能更清楚:pow2
是一个返回函数的函数。请检查编辑。
(three 2)
; inline three
((lambda(y)
(pow1 3 y))
2)
; apply lambda
(pow1 3 2)