首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方案、高阶函数和咖喱函数

方案、高阶函数和咖喱函数
EN

Stack Overflow用户
提问于 2016-03-04 07:20:22
回答 1查看 246关注 0票数 1

我需要编写一个Scheme高阶函数,它以两个参数的函数作为参数,并返回函数的匆匆版本。到目前为止,我对咖喱功能的理解是:

代码语言:javascript
复制
(define curriedFunction (lambda (x) 
        (if (positive? x)
            (lambda (y z) (+ x y z))
            (lambda (y z) (- x y z)))))

(display ((curriedFunction -5) 4 7))
(display "\n")
(display ((curriedFunction 5) 4 7))

如果x是负的,它减去x,y和z,如果x是正的,它会加x,y和z。

关于高阶函数,我理解如下:

代码语言:javascript
复制
(display (map (lambda (x y) (* x y)) '(1 2 3) '(3 4 5)))

第三,我在传递职能作为论据方面非常了解这一点:

代码语言:javascript
复制
(define (function0 func x y)
        (func x y))

(define myFunction (lambda (x y)
        (* x y)))

(display (function0 myFunction 10 4))

在上面的代码中,我理解函数"myFunction“也可以这样编写:

代码语言:javascript
复制
(define (myFunction x y)
        (* x y))

所以,现在您知道我在Scheme编程和语法方面的位置了。现在回到编写一个Scheme高级函数的问题,该函数以两个参数的函数为参数,并返回函数的匆匆版本。如何将这些概念联系在一起?提前谢谢你,我真的很感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-04 07:39:43

以下是一个可能的解决方案:

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

函数curry接受函数f并返回带有单个参数x的函数,该函数给定参数值,返回另一个函数,该函数接受参数y,并返回将原始函数f应用于xy的结果。因此,例如,(curry +)返回一个+的咖喱版本

代码语言:javascript
复制
(((curry +) 3) 4)  ;  produces 7
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35790234

复制
相关文章

相似问题

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