gpt4 book ai didi

c++ - 任何开源项目都使用 FC++ 吗?

转载 作者:IT老高 更新时间:2023-10-28 22:59:51 26 4
gpt4 key购买 nike

FC++库提供了一种有趣的方法来支持 C++ 中的函数式编程概念。

FAQ 中的一个简短示例:

take (5, map (odd, enumFrom(1)))

FC++ 似乎从 Haskell 中汲取了很多灵感,以至于重用了 Haskell 前奏中的许多函数名称。

我最近看到了 article关于它,它在stackoverflow的一些答案中被简要提到过,但我在野外找不到它的任何用法。

有没有积极使用 FC++ 的开源项目?或者过去使用它的任何项目历史?或者有没有人亲 body 验过?

网站上有一个客户部分,但唯一的事件链接是指向同一作者的另一个库 (LC++)。

作为背景:我正在寻找使用现有 C++ API 编写低延迟音频插件,并且我正在寻找允许我以函数式风格编写简洁代码的工具。对于这个项目,我不想使用 C++ 库而不是使用单独的语言,以避免引入 FFI 绑定(bind)(因为复杂性)或垃圾收集(将延迟的上限保持在亚毫秒范围内)。

我知道 STL 和 Boost 库已经提供了许多 FP 概念的支持——这很可能是一种更实用的方法。我还知道从功能语言生成音频 DSP 代码的其他有前途的方法,例如 FAUST项目或 Haskell synthesizer package .

最佳答案

这不是您问题的正确答案,但是我将函数式样式嵌入命令式语言的经验非常糟糕。虽然代码几乎可以简洁,但它保留了命令式语言中推理的复杂性。

嵌入的复杂性通常需要对语言的细节和极端情况有最深入的了解。这大大增加了抽象的成本,因为必须始终仔细考虑这些事情。由于抽象成本如此之高,将一个副作用函数放入惰性流生成器然后死于细微的错误会更容易。

FC++ 的一个例子:

struct Insert : public CFunType<int,List<int>,List<int> > {
List<int> operator()( int x, const List<int>& l ) const {
if( null(l) || (x > head(l)) )
return cons( x, l );
else
return cons( head(l), curry2(Insert(),x,tail(l)) );
}
};

struct Isort : public CFunType<List<int>,List<int> > {
List<int> operator()( const List<int>& l ) const {
return foldr( Insert(), List<int>(), l );
}
};

我相信这是试图表达以下 Haskell 代码:

-- transliterated, and generalized
insert :: (Ord a) => a -> [a] -> [a]
insert x [] = [x]
insert x (a:as) | x > a = x:a:as
| otherwise = a:insert x as

isort :: (Ord a) => [a] -> [a]
isort = foldr insert []

随着程序的增长,我会让您判断该方法的复杂性。

我认为代码生成是一种更具吸引力的方法。您可以将自己限制在目标语言的一小部分,从而轻松移植到不同的目标语言。用诚实的函数式语言进行抽象的成本几乎为零,因为毕竟它们就是为此而设计的(就像用命令式语言对命令式代码进行抽象一样便宜)。

关于c++ - 任何开源项目都使用 FC++ 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3995942/

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