【发布时间】:2010-06-10 06:17:09
【问题描述】:
我不知道 haskell 语法,但我知道一些 FP 概念(如代数数据类型、模式匹配、高阶函数等)。
谁能解释一下,这段代码是什么意思:
data Tree ? = Leaf ? | Fork ? (Tree ?) (Tree ?)
rotateR tree = case tree of
Fork q (Fork p a b) c -> Fork p a (Fork q b c)
据我了解,第一行类似于树类型声明(但我并不完全理解)。第二行包括模式匹配(我也不明白为什么我们需要在这里使用模式匹配)。第三行对非 Haskell 开发人员来说是绝对不可读的。我发现 Fork 的定义为 fork (f,g) x = (f x, g x),但我不能再进一步了。
【问题讨论】:
-
查看 carlmon 对 Fork 的回应。通过一个小的重构,我们可以将 rotateR 重写为一个方程: rotateR (Fork q (Fork p a b) c) = Fork p a (Fork q b c) 然后它的意思就是它所说的。如果将 (Fork q (Fork p a b) c) 传递给 rotateR,对于 q,p,a,b,c 的任何值,您将得到 Fork p a (Fork q b c)。
标签: syntax haskell functional-programming binary-tree