【问题标题】:Converting OCaml to F#: Converting OCaml quotation add and quotation expander to F#将 OCaml 转换为 F#:将 OCaml 引号添加和引号扩展器转换为 F#
【发布时间】:2012-05-12 11:20:31
【问题描述】:

我正在将几个基于 OCaml 的模块转换为 F#,并遇到了用于引用扩展器的 OCaml ''Quotation.add'' 编译器指令。

引号扩展器是用 OCaml 编写的函数。打电话给 Camlp4 库函数 ''Quotation.add'' 添加引号 扩展器。

Camlp4 - Tutorial, Ch. 3

在 F# 书籍、F# 网站、Google 和此处搜索引号扩展器和 ''Quotation.add'' 编译器指令后,我得到的答案是否定的。

有人可以确认 F# 不支持 OCaml ''Quotation.add'' 编译器指令的概念或 OCaml 引号扩展器的概念。

编辑

注意:我刚刚得知Camlp4是OCaml的预处理器-pretty-printer,当我问这个问题时,我以为它是一个单独的OCaml库;现在说得通了。

【问题讨论】:

  • 你是对的 - campl4 库不适用于 F#,所以恐怕你需要使用另一种方法来重新实现 F# 中所需的功能。您能否分享有关您正在转换的函数的更多详细信息?
  • 我认为这是非常基本的答案,但我添加了一些可能相关的指针(对于您或其他读者)。
  • @TomasPetricek 这可能是一个基本的答案,但知道它不存在为我节省了大量寻找不存在的东西的工作。众所周知,有些人不看 cmets。谢谢。

标签: f# ocaml


【解决方案1】:

您是对的 - camlp4 库不适用于 F#,因此恐怕您需要使用另一种方法在 F# 中重新实现所需的功能。

一般来说,您可以从 F# 中使用一些相关技术(但如果不了解具体问题,很难判断其中任何一种技术是否对您有用):

  • F# Quotations 允许您操作 F# 代码,但编译能力有限(非常适合将 F# 转换为 SQL、JavaScript 或 GPU)
  • F# CodeDom(来自 F# PowerPack)允许您生成代码并使用 F# 编译器对其进行编译,但您可以将代码生成为文本或使用 .NET 面向对象的样式。
  • T4 Templating 是一个 .NET 模板机制,虽然上次我检查过,它不支持 F#(但我认为 Mono 版本可能会工作)
  • F# Type Providers(感谢 kvb)可以通过 F# 插件为编译器生成类型。这可以处理您使用 camplp4 生成某些类型以供以后使用的情况(即从较短的规范中),但如果您需要生成一些代码,它们的用途有限

【讨论】:

  • 如果可以选择以 F# 3.0 为目标,则类型提供程序也可能很重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 2012-09-03
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 2015-12-01
相关资源
最近更新 更多