Sml 多重应用
使用SML,我必须创建一个递归函数来执行以下操作Sml 多重应用,sml,ml,Sml,Ml,使用SML,我必须创建一个递归函数来执行以下操作 fun mult ([a,b,c]) - multiply a*b c times example: mult ([2,3,5]) -> [2, 6, 18, 54, 162, 486] fun mult (a, b) = a*b; fun multin ([a, b, c]) = if c=0 then nil else mult(a, b) :: multin ([mult(a,b),
fun mult ([a,b,c]) - multiply a*b c times
example: mult ([2,3,5]) -> [2, 6, 18, 54, 162, 486]
fun mult (a, b) = a*b;
fun multin ([a, b, c]) = if c=0 then nil
else mult(a, b) :: multin ([mult(a,b), b, c-1]);
multin ([2, 3, 5]);
更新:我有以下几点
fun mult ([a,b,c]) - multiply a*b c times
example: mult ([2,3,5]) -> [2, 6, 18, 54, 162, 486]
fun mult (a, b) = a*b;
fun multin ([a, b, c]) = if c=0 then nil
else mult(a, b) :: multin ([mult(a,b), b, c-1]);
multin ([2, 3, 5]);
结果为:val it=[6,18,54162486]:int list
在这种情况下,我需要第一个元素是2。如果我把基本情况设为c=0,然后是[a],那么它只会重复最后一个元素是什么;在本例中,它重复了486。除非您要求函数是尾部递归的,否则您不需要助手 首先要注意的是,如果
c
为零,那么答案是[a]
。这是递归的基本情况。否则,您需要构造一个列表,该列表是a
,包含在答案的其余部分上,您可以通过递归调用获得该列表
这应该是一个足够的提示,可以开始了。既然名单在上升,你为什么不数一数呢?差不多
fun mult ([a,b,k],c) = a*b^k::mult([a,b,k+1],c)
mult([a,b,0],c)
不确定什么是电力运营商,但你明白了
然后在k增量达到c时终止循环。嗨,欢迎来到StackOverflow!如果你不知道从哪里开始,开始用谷歌搜索递归。。在您尝试并面对问题后,请尝试再次询问StackOverflow。小心!如果
c
是0
,那么答案就是单身列表[a]
@Michael:如果c
是零,那么你想要的是一个列表[a]
,而不是nil
。(在考虑了爱德华多的建议后,我也将a*b
改为a
。)