sml - 如何在 SML 中的 else if 语句中解决“未解析的弹性记录”?
问题描述
我想查找当前给定节点直接或间接连接到的节点列表。例如,我有一个节点列表:
[1,2]
和一个元组列表,每个元组代表一条直接边:
[(1,5),(2,4),(4,6)]
所以,我正在寻找的节点是
[1,2,5,4,6]
因为,1 连接到 5,2 连接到 4。然后,4 连接到 6。为此,我需要两个队列和一个列表。每次发现新节点时,我们将新节点附加到队列和列表中。然后,我们删除队列的第一个节点,并转到下一个节点。如果一个新节点连接到队列的当前节点。然后,我们将新节点添加到队列和列表中。
我们一直这样做,直到队列为空并返回列表。
所以现在,我有一个附加函数,它将一个列表附加到另一个列表:
fun append(xs, ys) =
case ys of
[] => xs
| (y::ys') => append(xs @ [y], ys')
然后,我有一个名为 getIndirectNodes 的函数,它旨在返回给定节点间接连接到的节点列表,但会抛出“未解析的弹性记录”。据说 List1 和 List2 具有相同的项目。但是,List1 服务于队列,而 list2 服务于要返回的列表。
fun getIndirectNode(listRoleTuples, list1, list2) =
if list1 = []
then list2
else if hd(list1) = #1(hd(listRoleTuples))
then (
append(list1,#2(hd(listRoleTuples)) :: []);
append(list2,#2(hd(listRoleTuples)) :: []);
getIndirectNode(listRoleTuples,tl(list1),list2)
)
else
getIndirectNode(listRoleTuples,tl(list1),list2)
如果我删除 else if 语句,它工作得很好。但是,这不是我打算做的。问题出在 else if 语句中。我能做些什么来修复它?
解决方案
SML 需要准确地知道元组的形状才能解构它。
您可以指定参数的类型listRoleTuples : (''a * ''a) list
- 但使用模式匹配是一个更好的主意。
(该代码还有许多其他问题,但这就是您问题的答案。)
推荐阅读
- javascript - 页面加载后表单提交按钮无法立即工作
- performance - 为什么 Android Studio 运行这么慢?
- php - 查询不能正常工作。插入查询工作正常,但其他三个查询不能正常工作,发生错误
- javascript - 单击时,将搜索图标更改为关闭图标
- javascript - Javascript 在 Safari 中不起作用
- ssl - 通过自定义域为 GitHub Pages 站点提供服务时偶尔出现 SSL 错误
- r - 填充 3D 数组的有效方法
- hadoop - 在不更改现有 HIVE 架构的情况下从 HIVE 访问 ENUM 到 IMPALA
- windows - 在 Windows 机器上访问 Ras Pi 3 phpmyadmin
- c - 结构数据的 C 内存分配顺序