【发布时间】:2021-11-01 05:02:18
【问题描述】:
我想在元组列表中的每个第二个元素中使用searchingElements 列表进行搜索,并计算在测试中显示的元组列表中的列表中是否有月份,我不知道它是否应该通过递归来完成,我不知道如何在这里使用。
fun number_in_months(months : (int * int * int) list, months2 : (int * int * int) list,
months3 : (int * int * int) list, searchingElements : int list) =
if #2 (hd (tl months)) = (hd searchingElements)
then
1
else
0
val test3 = number_in_months ([(2012, 2, 28), (2013, 12, 1), (2011, 3, 31), (2011, 4, 28)], [2, 3, 4]) = 3
我得到了这 2 个错误,后来我明白了我无法在列表和元组列表之间进行比较
(fn {1=1,...} => 1) (hd number)
main.sml:30.2-30.30 Error: operator and operand do not agree [overload - bad instantiation]
stdIn:2.1-2.5 Error: unbound variable or constructor: fun3
【问题讨论】:
-
显示的代码格式非常糟糕的事实并没有帮助。但是解开它,我认为这里一定缺少一些东西。
fun3从未使用过,并且不是递归的。number_in_months从未定义。您引用的错误中显示的代码在此之前从未显示过。如果对您的尝试没有更全面的了解,将很难为您提供帮助。 -
假设给你测试代码,你应该编写一个名为“number_in_months”的函数,它需要两个列表,而不是一个名为“fun3”的函数需要四个。
-
顺便说一句:我怀疑这个特定练习的要点之一是它会变得非常复杂和困难,除非您将其划分为您通过辅助函数解决的子问题。
-
另外:越早适应模式匹配越好。
-
抱歉,我在编译器本身中测试代码并尝试测试许多值,所以我没有关注代码结构,但我自己编辑了代码