![](/img/trans.png)
[英]Scala: why using `_` as a lambda expression body to be used as a function argument does not work?
[英]Why does this racket function need an argument? And how does it work?
我是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中传递的参数,格式应该是 -
(define (id id id) expression)
为什么三个不适用? 三个人究竟是如何工作的?
EDIT1-当我运行时(pow1 1 2)
我得到一个错误,说给出的参数数量是1,当我写(pow1 2 3 4)
它说参数的数量是3.发生了什么?
(define pow2
(lambda(x)
(lambda(y)
(pow1 x y))))
这将pow2
定义为某种lambda
表达式。
(define three (pow2 3))
这定义了three
(pow2 3)
的结果。 什么是(pow2 3)
? 好吧,让我们内联pow2
的值:
(pow2 3)
; inline pow2
((lambda(x)
(lambda(y)
(pow1 x y)))
3)
将lambda(参数x
)应用于值(例如3
)会替换lambda主体中的值(即我们可以将x
替换为3
):
(lambda(y)
(pow1 3 y))
现在这是three
的价值。
做(three 2)
就像这样:
(three 2)
; inline three
((lambda(y)
(pow1 3 y))
2)
; apply lambda
(pow1 3 2)
......从那里开始只是打电话给pow1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.