3
A
回答
5
您可以使用參數化類型。
type 'a wrapped = { base: 'a; extra: meta }
2
傑弗裏的解決方案是正確的,並且對遞歸類型完美縮放。
type location
type 'a loc = { a : 'a; loc : location }
type exp = Int of int | Add of exp loc * exp loc
它仍然有可能使用你的類型的前兩個時間的定義, 如下:
type exp_data = Int of int | Add of exp * exp
and exp = exp_data loc
最後,一個略微不同的風格是用「開放遞歸」,即用自由參數而不是遞歸出現僅定義「去反映類型」open_exp
。然後您可以通過獲取定點來獲取遞歸類型;您可以採取不同的固定點,一個沒有附加信息,另一個固定點例如交錯。這是一個在遞歸網站插入信息的通用結構,其術語級別的對象允許在遞歸函數中編寫不同的東西(記憶,分析,調試等)。
type 'e open_exp = Int | Add of 'e * 'e
type simple_exp = Simple of simple_exp open_exp
type located_exp = Loc of located_exp loc open_exp
相關問題
- 1. 訪問OCaml記錄
- 2. ocaml記錄類型和null
- 3. Ocaml中的記錄中的容器
- 4. 檢查ocaml中的記錄大小?
- 5. 信息與OCaml的隱藏記錄
- 6. 包裝返回記錄的OCaml函數
- 7. OCaml的:檢查記錄列表成員
- 8. 搜索遞歸記錄類型OCaml
- 9. 記憶化列表ocaml的
- 10. 如何在OCaml中模式匹配記錄?
- 11. OCaml在脫節工會中有記錄語法嗎?
- 12. OCaml:使記錄中的字段未定義?
- 13. Ocaml錯誤:未綁定的記錄字段標籤長度
- 14. OCaml中的記錄和元組有什麼區別
- 15. Ocaml中的記錄類型模式匹配
- 16. 錯誤:未綁定的記錄字段Server.callback - Ocaml
- 17. ocaml的多態記錄型較少一般
- 18. 具有嵌套記錄的OCaml功能更新
- 19. 在記事本++中編譯ocaml
- 20. 如何在返回列表之前記錄Ocaml中列表的所有元素?
- 21. OCaml中的記憶和參考列表
- 22. 在OCAML
- 23. 在oracle中記錄plsql表中記錄的新記錄
- 24. 記錄常量可以記錄在Delphi 6中的記錄嗎?
- 25. 功能,在OCaml的
- 26. 可以記錄OCaml中的字段更新是否可以推廣?
- 27. 記錄從CherryPy的記錄
- 28. OCaml - 如果地圖在標準OCaml中?
- 29. 記錄在MySQL的
- 30. emacs ocaml REPL:「搜索程序:沒有這樣的文件或目錄,ocaml」
如果我的類型是遞歸的? – pbp
沒有一個你可能想要的具體例子很難說。上面的'wrapped'類型將包裝任何類型,無論是否遞歸。如果你想在類型''a'和'meta'類型之間遞歸,你可能需要另一個類型參數。也許你會希望'meta'本身是一個參數化類型?儘量保持簡單! –
例如:'type exp = BinOp exp * op * exp | int'的const,我希望子表達式也可以用'meta'包裝。 – pbp