更新函数内的变量
Updating a variable inside a function
我在 SML 中创建了一个遍历列表起始元素的函数,如果第一个、第二个、第三个.. 元素相同,则删除这些元素并更新变量的 value.What 我写过:
let
val min=7
in
fun seen2 (set:int list) =
if hd set=hd(tl set) then
min=min-1
seen2(tl set)
else
tl set
end
这个函数的输出是一个包含我提到的元素的列表 deleted.For 例如,如果它得到这个列表作为输入->[1,1,1,1,2,3,4 ] 并且 min 设置为 7,之前我期望它给出 [2,3,4] 作为结果并且 min 更新为 4.The 应该存储 min 变量,因为这个函数可能会再次调用并且 min 可能进一步 updated.This 代码给了我语法 errors.At 最后的最小值必须被打印所以我认为这必须是一个全局值(?)。我怎么能做到这一点?
traverses the starting elements of a list and if first,second,third.. element are the same deletes these elements
如果 "first,second,third.." 你的意思是任意多,那么这就是你想要做的:
fun removeDuplicatesBeginning [] = []
| removeDuplicatesBeginning (x::y::zs) =
if (* are the first two elements the same? *)
then (* apply removeDuplicatesBeginning recursively
to sub-list with one of them removed *)
else (* no repeats, we're done recursing, only remove first element *)
使用测试表达您想要的行为,例如
val test_1 = removeDuplicatesBeginning [1,1,1,1,2,3,4] = [2,3,4]
并且不要忘记极端情况,例如
val test_2 = removeDuplicatesBeginning [2,3,4] = [3,4]
val test_3 = removeDuplicatesBeginning [1,2,1] = [2,1]
避免...
- 在开头设置元素,如
let val min = 7 in ... end
。没有意义。
- 不能写
let ... in fun ... end
,因为fun ...
是声明,let
只能有in
和end
之间的表达式. (另一件事是 local ... in ... end
,但你仍然不想这样做。没有意义。)
- 使用
hd
和 tl
。在输入列表的元素(x::xs
或 x::y::zs
)上使用模式匹配。
我在 SML 中创建了一个遍历列表起始元素的函数,如果第一个、第二个、第三个.. 元素相同,则删除这些元素并更新变量的 value.What 我写过:
let
val min=7
in
fun seen2 (set:int list) =
if hd set=hd(tl set) then
min=min-1
seen2(tl set)
else
tl set
end
这个函数的输出是一个包含我提到的元素的列表 deleted.For 例如,如果它得到这个列表作为输入->[1,1,1,1,2,3,4 ] 并且 min 设置为 7,之前我期望它给出 [2,3,4] 作为结果并且 min 更新为 4.The 应该存储 min 变量,因为这个函数可能会再次调用并且 min 可能进一步 updated.This 代码给了我语法 errors.At 最后的最小值必须被打印所以我认为这必须是一个全局值(?)。我怎么能做到这一点?
traverses the starting elements of a list and if first,second,third.. element are the same deletes these elements
如果 "first,second,third.." 你的意思是任意多,那么这就是你想要做的:
fun removeDuplicatesBeginning [] = []
| removeDuplicatesBeginning (x::y::zs) =
if (* are the first two elements the same? *)
then (* apply removeDuplicatesBeginning recursively
to sub-list with one of them removed *)
else (* no repeats, we're done recursing, only remove first element *)
使用测试表达您想要的行为,例如
val test_1 = removeDuplicatesBeginning [1,1,1,1,2,3,4] = [2,3,4]
并且不要忘记极端情况,例如
val test_2 = removeDuplicatesBeginning [2,3,4] = [3,4]
val test_3 = removeDuplicatesBeginning [1,2,1] = [2,1]
避免...
- 在开头设置元素,如
let val min = 7 in ... end
。没有意义。 - 不能写
let ... in fun ... end
,因为fun ...
是声明,let
只能有in
和end
之间的表达式. (另一件事是local ... in ... end
,但你仍然不想这样做。没有意义。) - 使用
hd
和tl
。在输入列表的元素(x::xs
或x::y::zs
)上使用模式匹配。