讓我們在 Haskell 中有一些有限的遞回資料結構。例如。
data Tree = Node Tree Tree | Nil
我需要能夠將此類資料結構從 Haskell 加載到 Python,對其進行更改并將其回傳給 Haskell。
有沒有一些標準/優雅的方法可以做到這一點而不會帶來太多痛苦?例如。使用一些像物件這樣的目錄?
謝謝。
uj5u.com熱心網友回復:
最簡單的選擇可能是通過 JSON,因為 Haskell 很容易支持將資料保存為 JSON,而 Python 可以直接將其加載為 dicts。
{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-}
import GHC.Generics
import Data.Aeson
import Data.Aeson.TH
data Tree = Node Tree Tree | Nil
deriving (Generic, FromJSON, ToJSON)
這會生成相當尷尬的 JSON,但是就像Node (Node Nil Nil) Nil變成
"tag": "Node",
"contents": [
{
"tag": "Node",
"contents": [
{
"tag": "Nil"
},
{
"tag": "Nil"
}
]
},
{
"tag": "Nil"
}
]
它變得更加緊湊
data TreeNode = Node { lSubtree, rSubtree :: Tree }
deriving (Generic, FromJSON, ToJSON)
type Tree = Maybe TreeNode
等價物Node (Just (Node Nothing Nothing)) Nothing現在保存為
{
"rSubtree": null,
"lSubtree": {
"rSubtree": null,
"lSubtree": null
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/427276.html
上一篇:如何檢查串列中的下一個元素是否大于Haskell中的前一個?
下一篇:函式應用的優先級
