我想看看如何模仿(curry func)
that racket
提供。下面是我如何手动柯里化函数的示例:
#lang sicp
; convert to a curried function
(define (add1 x y) (+ x y))
(define add2
(lambda (x)
(lambda (y)
(+ x y))))
(add1 2 3)
; 5
((add2 2) 3)
; 5
我从哪里开始添加一个高阶函数,以便将“普通”函数转换为柯里化函数,如下所示:
(((curry add1) 2) 3)
您必须做出一些权衡,因为很难判断函数接受多少个参数。球拍有一个procedure-arity
函数让curry
告诉 curry 有多少个参数,但 SICP 语言没有。所以你必须选择如何处理这个问题。一些合理的选择包括:
- 让调用者指定等待多少个参数
- 仅适用于固定数量的参数
- 只咖喱第一个n调用一个函数,并且有n+1通过底层函数进行调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)