FC++ 是否被任何开源项目使用?

2024-03-06

The FC++ http://www.cc.gatech.edu/~yannis/fc++/库提供了一种有趣的方法来支持 C++ 中的函数式编程概念。

一个简短的例子来自FAQ http://www.cc.gatech.edu/~yannis/fc++/faq.html#faq5:

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

FC++ 似乎从 Haskell 中获得了很多灵感,以至于重用了 Haskell prelude 中的许多函数名称。

我最近看到一个article http://www.ibm.com/developerworks/aix/library/au-learningfc/index.html?ca=dgr-lnxw07FCPPdth-AIX关于它,并且在 stackoverflow 上的一些答案中简要提到了它,但我在野外找不到它的任何用法。

有没有积极使用 FC++ 的开源项目?或者过去使用过它的项目的历史吗?或者有人有这方面的亲身经历吗?

网站上有一个“客户”部分,但唯一的活动链接是相同作者的另一个库 (LC++)。

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

我知道 STL 和 Boost 库已经提供了许多 FP 概念的支持——这很可能是一种更实用的方法。我还知道从函数式语言生成音频 DSP 代码的其他有前途的方法,例如FAUST http://faust.grame.fr/项目或 Haskell合成器包 http://hackage.haskell.org/cgi-bin/hackage-scripts/package/synthesizer.


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

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

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 []

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FC++ 是否被任何开源项目使用? 的相关文章

  • 如何在 Qt Creator 中编辑 QtWebKit 的右键上下文菜单?

    好吧 这是我的困境 我正在使用 Qt Creator 制作一个使用 Webkit 的简单应用程序 我认为 Qt Creator 会有一种简单的方法来使用信号和槽编辑器编辑右键单击上下文菜单 但事实证明这不是真的 我知道 webkit 有与上
  • WriteLine 与类

    我正在制作一个 SchoolApp 程序来学习 C 并且我正在尝试实现以下主要功能 namespace SchoolApp class Program public static void Main string args School s
  • 是否可以通过容器/包装器在 WPF 表单中托管 WinForm 表单?

    有没有办法在 WPF 表单中的某种容器或包装类型控件中托管 显示完整的 WinForms 表单 而不仅仅是单个控件 我正在寻找与 html 中的 php 或 iframe 的虚拟包含概念类似的东西 可能通过将其编译成 OCX 或 DLL 来
  • 从 gdb 设置 std::string 变量值?

    是否有可能 当调试器在断点处停止时 修改 std string 变量的值 而不需要采取诸如调整当前缓冲区的内存映像之类的黑客手段 例如类似于 set var mystring hello world 试试这个 经过测试并且对我有用 call
  • 如何访问UPnP设备的服务?

    设备 贝尔金 WeMo Switch开发环境 Windows 7 上的 MS VC 2010 我正在尝试使用 Windows 中的 C 枚举 UPnP 设备的服务 我有IUPnPDevice指针并可以访问多个属性 我有IUPnPServic
  • LongListSelector 更改 ItemTemplate

    我想动态改变ItemTemplate of a LongListSelector 我通过将其绑定到 ViewModel 中的属性来做到这一点
  • Unity C# 嵌套 IEnumerator

    在我的代码中 我嵌套了 IEnumerator 方法 如下所示 private IEnumerator PerformRequest string url Doing stuff UnityWebRequest request UnityW
  • C# 检测关闭应用程序

    我正在尝试创建任务栏替换 并且我想要每个正在运行的应用程序都有一个按钮 public void AddBtn string name Button newButton new Button this Controls Add newButt
  • Makefile:没有规则来制作目标

    我正在关注本指南makefile http www cs colby edu maxwell courses tutorials maketutor 但我根本不理解最后一个例子 并且我无法让我的 makefile 工作 因为我收到了错误ma
  • 如何使用 mongo-cxx-driver 设置 Visual Studio 项目设置?

    我已经在 Windows 10 上成功构建了用于 C 的 MongoDB 驱动程序版本 3 0 3 CMAKE INSTALL PREFIX C mongo cxx driver 但我不知道如何在 Visual Studio 2015 中设
  • 结构体指针运算符猜想(理论)

    结构体指针的使用非常频繁 因此有一个特殊的运算符 gt 下面的表达式是等价的 x y x gt y 将此运算符简单地视为如下定义的预处理器宏是否公平 define x gt x 为什么或者为什么不 或者它从一开始就被编码为运算符 这有何不同
  • 指向虚拟成员函数的指针。它是如何工作的?

    考虑以下 C 代码 class A public virtual void f 0 int main void A f A f 如果我不得不猜测 我会说 A f 在这种情况下意味着 A 的 f 实现的地址 因为指向常规成员函数和虚拟成员函数
  • 代码契约确保 ReSharperExternalAnnotations

    有谁知道如何在 ReSharperExternalAnnotations 中添加 Code Contracts Ensures 它在最新的 v7 1 3 和最新的 v8 EAP 中都不存在 在任何自定义 xml 中也不存在 具体来说 它应该
  • Visual Studio 2019 能否将所需的 DLL 打包到一个小的 .exe 文件中?

    我使用 Visual Studio 2019 使用 C WinAPI 制作了一个 Windows 应用程序 完成后 我构建了它 并在我的计算机上执行 它工作完美 然后我发给我没有Visual Studio的朋友 它说需要 msvcp140d
  • 我可以向函数添加属性以防止重入吗?

    目前 我有一些如下所示的功能 private bool inFunction1 false public void function1 if inFunction1 return inFunction1 true do stuff whic
  • 使用 lambda 从数组中选择每隔一个元素[重复]

    这个问题在这里已经有答案了 C 4 0 如何使用 lambda 表达式完成以下操作 int a new int 8 0 1 2 3 4 5 6 7 Now fetch every second element so that we get
  • 如何在 Linux 中创建可通过 Screen 应用程序连接的 pty

    我想创建 C C 应用程序 它在 dev xxx 中创建新的 虚拟 设备 并且能够与 屏幕 应用程序连接 例如 循环运行的程序会创建新的 dev ttyABC 然后我将使用 屏幕 dev ttyABC 当我向那里发送一些字符时 应用程序将其
  • 简单的 C# 屏幕共享应用程序

    我希望用 C 创建一个非常基本的屏幕共享应用程序 无需远程控制 我只希望用户能够将他们的屏幕广播到网络服务器 我应该如何实施这个 任何指向正确方向的指针将不胜感激 它不需要很高的 FPS 甚至更新 5 秒左右就足够了 您认为每隔 5 秒上传
  • 删除重复项并将列表放入列表框中

    这是一项大学作业 我对其中的一部分遇到了问题 这是代码 namespace Assignment 1 public partial class Classifier System Web UI Page We are using a web
  • 向前声明类模板显式/部分专业化有什么意义?

    C 98 标准规定 temp class spec 部分专业化声明本身不能通过名称查找找到 如果显式专业化也是如此 则这会使类模板显式 部分专业化的前向声明不可见 temp class spec match 当在需要实例化该类的上下文中使用

随机推荐