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),

使用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), 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
。)