racket – 使用“MIT风格的curried-procedure表单”和传递给`curry`函数的lambda表达式有什么区别吗?

racket – 使用“MIT风格的curried-procedure表单”和传递给`curry`函数的lambda表达式有什么区别吗?,第1张

概述鉴于后面的代码片段,example-func-A和example-func-B之间是否有任何有意义的区别? #lang racket/base(require (only-in racket/function curry))(define (((example-func-A x) y) z) (+ x y z))(define example-func-B (curry 鉴于后面的代码片段,example-func-A和example-func-B之间是否有任何有意义的区别?

#lang racket/base(require (only-in racket/function curry))(define (((example-func-A x) y) z)  (+ x y z))(define example-func-B  (curry   (lambda (x y z)     (+ x y z))))
解决方法 是的,example-func-A(使用MIT样式的currIEd-procedure语法)不如example-func-B灵活,因为它一次只能用一个参数调用:

> (((example-func-A 4) 5) 6)15> (example-func-A 4 5 6)example-func-A: arity mismatch; the expected number of arguments does not match the given number  expected: 1  given: 3  arguments...:   4   5   6  context...:   /opt/homebrew-cask/Caskroom/racket/6.4/Racket v6.4/collects/racket/private/misc.rkt:87:7

相比之下,example-func-B适用于接收多个(甚至零!)参数:

> (((example-func-B 4) 5) 6)15> (example-func-B 4 5 6)15> ((((example-func-B) 4)) 5 6)15

(据推测,咖喱的灵活性会在运行时受到一点性能影响.)

总结

以上是内存溢出为你收集整理的racket – 使用“MIT风格的curried-procedure表单”和传递给`curry`函数的lambda表达式有什么区别吗?全部内容,希望文章能够帮你解决racket – 使用“MIT风格的curried-procedure表单”和传递给`curry`函数的lambda表达式有什么区别吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1045327.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存