鉴于后面的代码片段,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
(据推测,咖喱的灵活性会在运行时受到一点性能影响.)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。