Cla*_*diu 2 scheme programming-languages currying racket
当我执行以下操作时会发生什么?
(define ((func x) y)
(if (zero? y)
((func x) 1)
12))
Run Code Online (Sandbox Code Playgroud)
我明白我可以这样做:
(define curried (func 5))
Run Code Online (Sandbox Code Playgroud)
而现在我可以使用咖喱.我很好奇的是函数的定义.是行吗?
((func x) 1)
Run Code Online (Sandbox Code Playgroud)
用x作为参数创建一个新的lambda,然后在1上调用它?或者它比那更聪明,它只是重新使用现有的.(例如,如果我这样做(curried 0)
,该((func x) 1)
行将等同于(curried 1)
- PLAI Scheme是否这样做?)
在Scheme标准中指定了
(define (f x) 42) is short for (define f (lambda (x) 42)) .
Run Code Online (Sandbox Code Playgroud)
自然(非标准)概括意味着:
(define ((f x) y) (list x y)) is short for (define (f x) (lambda (y) (list x y)))
which is short for (define f (lambda (x) (lambda (y) (list x y))))
Run Code Online (Sandbox Code Playgroud)
为了测试它,让我们尝试DrScheme中的示例
欢迎使用DrScheme,版本4.1.3.3-svn5dec2008 [3m].语言:模块; 内存限制:384兆字节.
(define((fx)y)(list xy))(f 1)
((f 1)2)(1 2)
如果我们命名临时值,可能更容易看到发生了什么:
(定义h(f 1))(h 2)(1 2)(h 3)(1 3)
由于"PLAI Scheme"在DrScheme中实现,我相信它继承了这种快捷方式.
归档时间: |
|
查看次数: |
1684 次 |
最近记录: |