2012-05-02 76 views
4

我將幾個基於OCaml的模塊轉換爲F#,並運行到OCaml的Quotation.add編譯器指令中以獲取引用擴展器。將OCaml轉換爲F#:將OCaml引用添加和引用擴展器轉換爲F#

報價擴展器是用OCaml編寫的函數。調用 Camlp4庫函數''Quotation.add''添加報價 擴展器。

Camlp4 - Tutorial, Ch. 3

尋找兩者報價擴張和F#書「」 Quotation.add'編譯器指令後,F#的網站,谷歌在這裏,我得到的答案是否定的。

有人可以確認F#不支持OCaml「Quotation.add」編譯器指令或OCaml引用擴展器的概念。

編輯

注:我剛剛得知Camlp4是OCaml中的預處理程序相當打印機,我認爲這是OCaml中一個單獨的庫時,我問的問題;現在它是有道理的。

+3

你是對的 - campl4庫不適用於F#,因此恐怕您需要使用其他方法來重新實現您在F#中需要的功能。你能分享你正在轉換的功能的更多細節嗎? –

+0

我認爲這是非常基本的答案,但我添加了一些可能相關的指針(對於您或其他讀者)。 –

+0

@TomasPetricek這可能是一個基本的答案,但知道它不存在爲我節省了大量的工作,尋找一些不存在的東西。據我們所知,有些人不看評論。謝謝。 –

回答

10

你是對的 - camlp4庫不適用於F#,所以恐怕你需要使用另一種方法在F#中重新實現所需的功能。

在一般情況下,有一對夫婦,你可以從F#使用相關技術(但它是很難說,如果任何人對你有用不知道更多的關於特定問題):

  • F# Quotations允許你操縱F#代碼,但是編譯能力有限(對於將F#翻譯成SQL,JavaScript或GPU可能是很好的)
  • F# CodeDom(來自F#PowerPack)允許你使用F#編譯器生成代碼並編譯它,但您可以生成代碼作爲文本或使用.NET面向對象的風格。
  • T4 Templating是一個.NET模板機制,但我最後一次檢查,它不支持F#(但我認爲,單聲道版本可能工作)
  • F# Type Providers(感謝KVB)使人們有可能產生由F#類型的插件爲編譯器。這可以處理你使用camplp4生成稍後使用的某些類型(例如,從較短規格)的情況,但是如果你需要生成一些代碼,它們的使用有限
+3

如果定位F#3.0是一個選項,類型提供者也可能會感興趣。 – kvb

+0

@kvb偉大的一點。我會補充一點! –

相關問題