gpt4 book ai didi

c++ boost::bind vs clojure 部分函数

转载 作者:行者123 更新时间:2023-11-30 00:38:18 26 4
gpt4 key购买 nike

c++的boost bind库和clojure的偏函数很相似。例如:

int x = 8;
bind(std::less<int>(), _1, 9)(x); // x < 9

这类似于clojure的偏函数:

((partial > 9) 8)

不同之处在于,partial 只允许绑定(bind)前 n 个参数,而 boost::bind 允许占位符指示哪些参数已绑定(bind),哪些未绑定(bind)。所以 boost::bind 实际上更加通用和有用:

bind(f, _2, _1)(x, y);                 // f(y, x)

bind(g, _1, 9, _1)(x); // g(x, 9, x)

我想知道 clojure(或 clojure-contrib)中是否有类似于 boost::bind 的东西?为什么 partial 没有像 boost::bind 那样更通用(更有用)?

最佳答案

这是一个相当常见的 Clojure 问题,更多的是用线程宏 -> 和 ->> 来表达为什么它们也不允许任意占位符。

在我看来,给出这些理由的原因也适用于此:惯用的 Clojure 函数通常会分解为适合单独提供第一个或最后一个参数的函数,而不是混合提供。

换句话说,开发人员通常会尝试对函数进行编码,以便它们适用于 ->、->> 和/或部分。

鉴于匿名函数的阅读器宏,在需要时创建占位符版本相当容易,适用于不那么惯用的情况:

#(f %2 %1) ;; bind(f, _2, _1)
#(g % 9 %) ;; bind(g, _1, 9, _1)

关于c++ boost::bind vs clojure 部分函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11276036/

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