gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:52:06 26 4
gpt4 key购买 nike

根据下面的代码片段,example-func-Aexample-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 风格的柯里化(Currying)过程语法)不如 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

(大概是 curry 的灵 active 在运行时带来了一些性能损失。)

关于racket - 使用 “MIT-style curried-procedure forms” 和传递给 `curry` 函数的 lambda 表达式有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35954949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com