【发布时间】:2017-02-03 14:40:03
【问题描述】:
我是 SML 的新手。我编写了一个函数,它需要 2 个 int 和一个元组列表作为输入。
fun move(x,y,mylist:(int * int)list): NOxNO =
let
val counter = ref y-1
in
if y=1 then (x,y)
else (
while !counter > 0 do (
if List.exists (fn s => s = (x,!counter)) mylist
then counter := !counter - 1
else break
);
if !counter = 0 then (x,y) else (x,y-1)
)
end
因为我是初学者,所以我可能有语法错误。该函数试图做的是:它将检查列表以查找第一个元素为 x 且第二个元素从 1 到 y-1 变化的所有元组(像这样的元组: (x,1) (x,2) 。 .. (x,y-1) ) 如果它们都存在于列表中,它将返回 (x,y) 否则返回 (x,y-1)。我使用了一个while循环和一个计数器。计数器首先设置为 y-1,如果找到 (x,counter),则在 while 循环中,计数器的值将减小。最后,如果 counter=0 则意味着我们已经找到了所有的元组。运行程序后我遇到了这个错误:
Caught Error ../compiler/TopLevel/interact/evalloop.sml:296.17-296.20
../compiler/TopLevel/interact/evalloop.sml:44.55
../compiler/TopLevel/interact/evalloop.sml:66.19-66.27
怎么了?
【问题讨论】:
标签: sml