因此,从逻辑上看,我会看到这是如何工作的,但是,我找不到工作的Haskell语法来表示逻辑。这是我尝试使用嵌套后卫,这显然是不支持的功能:从Haskell中的二叉树中获取第N个元素
data Tree a where
Nil :: Tree a
Node :: Ord a => Tree a -> a -> Tree a -> Tree a
-- Get the nth top element of a sorted binary tree:
getNthElement :: Int -> Tree a -> Either Int a
getNthElement _ Nil = Left 0
getNthElement n (Node l v r)
| (Right x) <- rightRecurse = rightRecurse
| (Left nr) <- rightRecurse, nr == n = Right v
| (Left nr) <- rightRecurse
| (Right x) <- leftRecurse = leftRecurse
| (Left nl) <- leftRecurse = Left $ nl + nr + 1
where leftRecurse = getNthElement (n-nr-1) l in
where rightRecurse = getNthElement n r
:在ghci中
测试守卫只对函数定义有效,我会建议使用一个case表达式。卫兵是定义函数的好语法,case是一个可以嵌入其他表达式的正常表达式。 – bheklilr
完美!固定。谢谢! – clay
我应该删除还是等待某人回答接受? – clay