我是Haskell的新手,我很难理解我的代码在这里出了什么问题.
这是我应该做的:
考虑以下二叉树的定义
data BinaryTree a = Empty | Node a (BinaryTree a) (BinaryTree a)
Run Code Online (Sandbox Code Playgroud)
考虑通过向左和向下交换形成二叉树的镜像的函数reflect
reflect :: BinaryTree a -> BinaryTree a
reflect Empty = Empty
reflect (Node x l r) = Node x (reflect r) (reflect l)
Run Code Online (Sandbox Code Playgroud)
编写一个函数areMirrorImages,它确定两个二叉树t和u是否满足t = reflect u.该函数不应构建新树,因此不应调用reflect或Node; 虽然它可能在模式中使用Node.
这是我写的:
areMirrorImages :: BinaryTree a -> BinaryTree a -> Bool
areMirrorImages Empty Empty = True
areMirrorImages (Node _ _ _) Empty = False
areMirrorImages Empty (Node _ _ _) = False
areMirrorImages (Node x l r) …Run Code Online (Sandbox Code Playgroud) 我对Haskell编程很新,我无法理解为什么我在代码中收到此错误.
我的问题如下:任何正整数i可以表示为i = 2 ^ n*k,其中k是奇数,即,作为奇数的2倍的幂.我们在i中将n的指数称为n.例如,40的2的指数是3(因为40 = 2 ^ 3*5),而42的2的指数是1.如果i本身是奇数,则n是零.另一方面,如果我是偶数,那意味着它可以除以2.写一个函数exponentOfTwo,用于在其参数中找到2的指数.
我理解伪代码并且看起来相当简单:递归地将i除以2直到结果为奇数,除法发生的次数是n
这是我的代码(第31-32行):
exponentOfTwo :: Int -> Int
exponentOfTwo i = if odd i then 0 else 1 + exponentOfTwo (i 'div' 2)
Run Code Online (Sandbox Code Playgroud)
我在第32行第62列收到错误"字符'i'的字符串/字符文字中的词汇错误".
我试图在任何地方寻找解决这个错误的方法,到目前为止我没有运气.