繁体   English   中英

为什么这个球拍功能需要参数? 它是如何工作的?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM