ジョン・ヒューズは、Why Functional Programming Matters題した彼の有名な論文では、リストや注文したラベル付き木ためJohn Hughesの「foldtree」について私は誤解していますか?
listof * ::= Nil | Cons * (listof *)
treeof * ::= Node * (listof (treeof *))
と
foldtree
と呼ばれる機能を、データ型について説明し
foldtree f g a (Node label subtrees) = f label (foldtree f g a subtrees) foldtree f g a (Cons subtree rest) = g (foldtree f g a subtree) (foldtree f g a rest) foldtree f g a Nil = a
私はこれら2つのデータtyp HaskellではESは、と私は現在、foldtree
data Listof a = Nil | Cons a (Listof a)
deriving (Read, Show, Eq)
-- implementation of some list functions... (skipped)
data Treeof a = Node a (Listof (Treeof a))
deriving (Read, Show, Eq)
foldtree f g a (Node label subtrees) = f label (foldtree f g a subtrees)
foldtree f g a (Cons subtree rest) = g (foldtree f g a subtree) (foldtree f g a rest)
foldtree f g a Nil = a
を実装しようとしているが、私は型の不一致取得しています:(ヒューズについてのいくつかのより多くのことを考えた後
Couldn't match expected type ‘Treeof t’
with actual type ‘Listof (Treeof t)’
Relevant bindings include
subtrees :: Listof (Treeof t) (bound at whyFunMatters.hs:27:28)
label :: t (bound at whyFunMatters.hs:27:22)
f :: t -> t1 -> t1 (bound at whyFunMatters.hs:27:10)
foldtree :: (t -> t1 -> t1)
-> (t1 -> t1 -> t1) -> t1 -> Treeof t -> t1
(bound at whyFunMatters.hs:27:1)
In the fourth argument of ‘foldtree’, namely ‘subtrees’
In the second argument of ‘f’, namely ‘(foldtree f g a subtrees)’
(など)
を擬似)の実装をfoldtree
、私はそれを理解していないと、これらのタイプのミスマッチは今私にとって明らかに思える。より具体的には、foldtree
の第四の引数の型は、3つのパターン間で一貫思われない:第一のパターンにおける
- 、その引数は、それが持っている最後の2つのパターンの
- 一方、
Treeof a
を入力しましたタイプListof (Treeof a)
と入力します。
私は何が欠けていますか?
私はどちらかのミランダを知らないが、それはそのようなことを許可されている場合、私は驚かれることでしょう。私は、非公式のプレゼンテーション仮説が間違った組み合わせよりも真実に近いと思うが、John Hughesに尋ねなければならない(彼に質問する機会があれば、もっと面白い何かを聞いた方が良いかもしれない)。 – dfeuer
これは特定の関数言語で書かれておらず、論文の正確なコードはコンパイラを経由していません。ジョンを説得してハスケルのコードで彼の論文を更新しようとしましたが、彼はあまりにも忙しいです。しかし、他の誰かがそれをした場合、私は彼が貢献を受け入れると確信しています。 – augustss
@augustssありがとうございました:) – Jubobs