【发布时间】:2021-07-11 14:31:58
【问题描述】:
我是标准 ML 的新手,我有一个问题,在下面的代码中 我在没有引入结构的情况下运行,代码运行并给出结果。当我放入引入结构时 它显示语法错误。谁能帮帮我?
fun findInd([],size, value , ans , l , h ) = ~1
| findInd(lista ,size, value , ans , l , h) =
let
val midval = Real.round((real l + real h) / real 2)
val Nelem = List.nth(lista,midval)
in
if l<=h then
if Nelem <= value then findInd(lista,size,value,midval,midval+1,h )
else findInd(lista,size,value,ans,l,midval+(~1) )
else
ans
end;
let (* <-- this let gives the problem *)
val s = 0
val sum = ref s
val maxlen = 0
val maxlenptr = ref maxlen
val counter_start = 0
val counter = ref counter_start
val arr = [1,5,~58,~1]
val presum = [~53,~52,1,6]
val minInd = [3,2,0,0
while !counter < List.length(arr) do (
sum := !sum + List.nth(arr,!counter);
if !sum >=0 then maxlenptr := !counter + 1
else
let
val ind = findInd(presum, List.length(arr) , s , ~1 ,0 , List.length(arr) + (~1) )
val temp = List.nth(minInd,ind)
in
if ind <> ~1 andalso temp < counter_start then maxlenptr := Int.max(!maxlenptr,counter_start + (~temp))
else ()
end;
counter := !counter + 1
);
val m = !maxlenptr
in (* <--- this in *)
m
end;
【问题讨论】:
-
@sepp2k 已经回答了这个问题,但在我看来,您正在使用大量程序代码对列表进行操作,这些列表是递归数据结构。我不确定代码应该实现什么,但让我感到震惊的是,可能有一种更简洁的方法更“实用”。
-
是的,你是对的!我正在尝试编写此实现的 ML 代码,上面的代码是我尝试的一部分 - geeksforgeeks.org/…
标签: functional-programming sml