List (l+v)::…(列表+整数::(cons操作数)…)在SML中是什么意思?
这是我幻灯片中的SML函数。我不明白l+v怎么能在这里工作。 但实际上它是有效的:List (l+v)::…(列表+整数::(cons操作数)…)在SML中是什么意思?,list,sml,smlnj,List,Sml,Smlnj,这是我幻灯片中的SML函数。我不明白l+v怎么能在这里工作。 但实际上它是有效的: - fun addto (l,v) = = if null l then nil = else hd l + v :: addto (tl l,v); val addto = fn : int list * int -> int list addto ([1,2,3],2); val it = [3,4,5] : int list - addto ([1,2,3],~2); val it = [~1,0,
- fun addto (l,v) =
= if null l then nil
= else hd l + v :: addto (tl l,v);
val addto = fn : int list * int -> int list
addto ([1,2,3],2);
val it = [3,4,5] : int list
- addto ([1,2,3],~2);
val it = [~1,0,1] : int list
我想是这样的:
addto ([1,2,3],2);
val it = [3,4,5] : int list
现在它实际上是l nill,所以它返回addto[3],2;
但是hdl+v::添加到tll,v;不管怎么说,我是认真的;
我认为cons操作符::必须定义如下:
::
这里我的伪名实际上是整数,在addto[1,2,3],2的例子中。
但在我的函数中,我们有一个短语l+v:。。l是一个列表,v是一个整数,那么什么是l+v呢
p、 s我是一个完全的初学者,所以请原谅我,如果它太简单了,First::被定义为:
addto([1,2,3],2);
addto([2,3], 2);
addto([3], 2);
addto([],2)
例如,1::[2,3]是列表[1,2,3]
然后在代码中,表达式被解释为:
datatype 'a list = nil | :: of 'a * 'a list
因此,基本上,您的函数可以重写如下:
有趣的节目=
如果为null l,则为nil*如果l为空,则结果为空列表*
否则让
val head=hd l*取列表l的第一个元素*
val sum=水头+v*然后将其与v相加*
val result_tail=addto tl l,v*并为我列表尾部的所有x计算x+v*
在里面
sum::result_tail*结果是我刚刚计算的和,后跟递归调用给我的结果*
终止
最后,请注意,在大多数情况下,您不需要null或head之类的函数,因为我们使用模式匹配构造编写函数。这大大提高了可读性,而且通常情况下,它抑制了对此类函数的需求。例如,addto可以更简单地重写为:
乐趣添加到[],[]
|addto x::tl,v=x+v::addto tl,v
更简单,不是吗?第一个::定义为:
addto([1,2,3],2);
addto([2,3], 2);
addto([3], 2);
addto([],2)
例如,1::[2,3]是列表[1,2,3]
然后在代码中,表达式被解释为:
datatype 'a list = nil | :: of 'a * 'a list
因此,基本上,您的函数可以重写如下:
有趣的节目=
如果为null l,则为nil*如果l为空,则结果为空列表*
否则让
val head=hd l*取列表l的第一个元素*
val sum=水头+v*然后将其与v相加*
val result_tail=addto tl l,v*并为我列表尾部的所有x计算x+v*
在里面
sum::result_tail*结果是我刚刚计算的和,后跟递归调用给我的结果*
终止
最后,请注意,在大多数情况下,您不需要null或head之类的函数,因为我们使用模式匹配构造编写函数。这大大提高了可读性,而且通常情况下,它抑制了对此类函数的需求。例如,addto可以更简单地重写为:
乐趣添加到[],[]
|addto x::tl,v=x+v::addto tl,v
很简单,不是吗?非常感谢!这就是l+v代表取其头部并将其与v相加,所以两个整数。。我还有很长的路要走才能写出你写的最后一个函数。。这是我第一次接触sml!非常感谢,非常感谢!这就是l+v代表取其头部并将其与v相加,所以两个整数。。我还有很长的路要走才能写出你写的最后一个函数。。这是我第一次接触sml!多谢各位