首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有n个参数的curry函数

具有n个参数的curry函数
EN

Stack Overflow用户
提问于 2015-01-30 12:34:01
回答 1查看 846关注 0票数 1
代码语言:javascript
复制
(curry-n f n)

F:一个接受n个参数的函数

N:正整数>=2

例如,让我们说

代码语言:javascript
复制
(define (add2 a b c d) (+ 2 a b c d))  
(define func (curry-n add2 4))
((((func 1) 2) 3) 4)

应该产生12个。

我想我知道curry是如何工作的,对于一个二进制函数curry,我可以这样做

代码语言:javascript
复制
(define (curry-2 f)
 (lambda(x)
    (lambda(y)
     (f x y)))).

但是我很难在n个参数上泛化curry,有什么帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2015-01-30 12:50:34

当然,您可以使用循环。;-)下面是我的实现:

代码语言:javascript
复制
(define (curry-n f n)
  (let loop ((n n) (args '()))
    (if (zero? n)
        (apply f (reverse args))
        (lambda (x)
          (loop (- n 1) (cons x args))))))

下面是一个更通用的实现,它允许curried函数接受任意数量的参数,而不仅仅是1个:

代码语言:javascript
复制
(define (curry-n f n)
  (let loop ((n n) (args '()))
    (if (zero? n)
        (apply f (reverse args))
        (lambda xs
          (let retry ((rem (- n (length xs))) (xs xs))
            (if (negative? rem)
                (retry 0 (take xs n))
                (loop rem (append-reverse xs args))))))))

(takeappend-reverse来自SRFI 1。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28229287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档