【发布时间】:2019-10-29 16:09:37
【问题描述】:
您好,我是 SML 的新手,我一直在尝试编写一个函数,该函数将一个列表(在我的情况下为列表 prussia)作为参数,该列表具有两个整数和一个字符串的元组,我的函数必须创建列表中出现的所有年份没有重复(列表中每个元组的第二个元素)。我必须这样做创建两个函数(append_if_new 需要一年的列表并将其添加到列表中,它可以工作)并且 year 必须对列表中的所有元组执行此操作,我使用 foldl 尝试过,但我得到了一个 tycon不匹配。
钯。为此,我必须使用函数映射、过滤或折叠,并且我可以将 append_if_new 功能移至 year 函数。我认为错误出现在折叠调用中,我作为参数传递的函数不是我应该传递的函数类型,但我不确定是什么问题。谢谢
val prussia =
[(0,1875,"G"),(2,1876,"G"),(2,1877,"G"),(1,1878,"G"),(0,1879,"G"),
(0,1880,"G"),(1,1881,"G"),(1,1882,"G"),(0,1883,"G"),(3,1884,"G"),
(0,1885,"G"),(2,1886,"G"),...] : (int * int * string) list
fun append_if_new (lista:(int*int*string)list): int list =
let
val lista2 = []
val x = hd lista
val z = #2x
in
if (List.exists (fn y => y = z) lista2)
then lista2
else lista2@[z]
end
fun years (lista:(int*int*string)list): int list =
List.foldl append_if_new 0 lista
【问题讨论】:
标签: sml