haskell - 一个 Haskell 写错误的问题 Found hole _ a5
问题描述
创建一个计算二叉树中下一个元素的函数。
data BSearchTree a = Nil | Node a (BSearchTree a) (BSearchTree a)
deriving (Show, Eq)
successor :: (Ord a) => a -> BSearchTree a -> Maybe a
successor a = if a Nil then Just succ Nil
else if a (Node _ t1 t2)
then Just succ a (Node _ t1 t2)
else Nothing
找到的洞:_ :: a5 其中:'a5'是一个模糊类型变量 • 在'Node'的第一个参数中,即'_' 在'a'的第一个参数中,即'(Node _ t1 t2)'中表达式:a (Node _ t1 t2) • 相关绑定包括 a :: a (绑定在桌面/Aufgabe6.4.hs:32:11) 后继 :: a -> BSearchTree a -> Maybe a (绑定在桌面/ Aufgabe6.4.hs:32:1) 约束包括 Ord a (from desktop/Aufgabe6.4.hs:30:1-53) | | else if a (Node _ t1 t2)
不太明白,错误是什么意思...
解决方案
if a (Node _ t1 t2)
这不是有效的 Haskell。您似乎将其if
视为模式匹配的地方,而实际上它需要一个布尔表达式。
if a Nil then
这似乎遵循相同的逻辑。
而是考虑通过 case 表达式或函数定义进行模式匹配:
successor :: (Ord a) => a -> BSearchTree a -> Maybe a
successor _NotUsingThisValue Nil = ... something ...
successor valToMatch (Node val leftTree rightTree) = .. other thing ..
NBJust succ Nil
也无效。首先,它解析为(Just succ) Nil
(not Just (succ Nil)
),其次,这里没有有意义的使用succ
。
推荐阅读
- html - Apertium 意外输出语句分为三部分
- asynchronous - 异步函数中的第二个等待不起作用。未捕获的 SyntaxError:await 仅在异步函数和模块的顶层主体中有效
- database - 在 NoSQL 数据库中创建设置表
- node.js - Node Mongodb .find 返回奇怪的结果
- angular - 如何从 Angular 应用程序在社交网站中共享链接
- html - 从 ASP.NET Core MVC Web 应用程序获取所需的显示
- python - 用 geopandas 绘制热图(kdeplot)
- javascript - 清空数组的函数在 then() 内部不起作用
- python - 如何从本地机器为 Django 项目连接 AWS Elasticache Redis?
- amazon-web-services - 将用户输入用作 Amazon DynamoDB 分区键是否安全?