微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何创建像球拍一样的咖喱功能

如何解决如何创建像球拍一样的咖喱功能

我想看看如何模拟 (curry func) 提供的 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)

解决方法

您必须进行一些权衡,因为要判断一个函数接受多少个参数并不容易。 Racket 有一个 procedure-arity 函数,它让 curry 告诉有多少个参数要柯里化,但 SICP 语言没有。所以你必须选择如何处理这个问题。一些合理的选择包括:

  • 让调用者指定等待多少个参数
  • 仅使用固定数量的参数
  • 只对函数进行前 n 次调用,并通过底层函数进行 n+1 次调用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。