2012-09-20 46 views
1

我想在Haskell中實現AST。我需要一個父引用,所以它似乎不可能使用功能數據結構。我在article中看到以下內容。我們定義一個節點爲:Haskell中帶父項的語法樹

type Tree = Node -> Node 

節點允許我們通過類型爲Key a的鍵獲取屬性。 有什麼可以閱讀關於這種模式?你能給我更多的鏈接嗎?

+3

看看拉鍊。 – Squidly

+0

這裏有一個不錯的[鏈接](http://learnyouahaskell.com/zippers)。 –

+0

也請關注ekmett的[鏡頭](http://hackage.haskell.org/package/lens)庫。他正在研究集成在lib中的基於鏡頭的拉鍊實現。對於(我認爲)下一個版本。 – jberryman

回答

2

如果你想要一個純循環自引用的數據結構,那麼delnan在評論the usual term for that is "tying the knot"中說。搜索這個詞可以給你更多的信息。

請注意,通過綁定結構建立的數據結構很難(或不可能)以通常的方式「更新」 - 使用非循環結構時,可以在構建基於它,但是改變任何一個循環都需要你重建整個循環。取決於你在做什麼,當然這可能會也可能不是問題。

+0

這正是我想要的!謝謝! –

+3

@KonstantinSolomatov:您可能會發現瀏覽某些標準庫的源代碼很有趣。函數如'repeat x = xs where xs = x:xs'被定義爲綁定結的方式,以便使用'repeat'創建一個帶有一個「head」元素的列表,這個元素是它自己的尾部。天真的'重複x = x:重複x'不會那樣做。 –