SML 函数创建从 1 到 n 的列表
SML Function to make a list from 1 to n
我是 SML 的新手,有点困惑。我正在尝试编写一个名为 makeList 的函数,类型为 int -> int list,它将正整数 n 和 returns 列表 [1, 2, ..., n]
作为输入
我希望唯一的输入是结束数字,但我在没有指定起点的情况下努力做到这一点。
fun createList(start:int, ending:int) =
if(start = ending)
then []
else
start::createList(start + 1, ending);
我希望能够只输入一个数字,例如 6 并得到一个列表,例如:[1,2,3,4,5,6] 我想在不使用外部库的情况下执行此操作喜欢 list.something
这是我被教导的唯一方法,我将不胜感激有关如何改进的提示。
您已经完成了 99%。使用您当前的函数,createList(1, 7)
产生 [1, 2, 3, 4, 5, 6]
。你只需要另一个自动填充其中一个参数的函数。
fun createList(start, ending) =
if start = ending then []
else start :: createList(start + 1, ending);
fun createList'(ending) =
createList(1, ending + 1);
试试这个,createList'(6)
会产生 [1, 2, 3, 4, 5, 6]
。
现在,假设您不希望两者都可见。您可以将一个函数“隐藏”为本地绑定。
fun createList(ending) =
let
fun aux(start, ending) =
if start = ending then []
else start :: aux(start + 1, ending)
in
aux(1, ending + 1)
end;
我是 SML 的新手,有点困惑。我正在尝试编写一个名为 makeList 的函数,类型为 int -> int list,它将正整数 n 和 returns 列表 [1, 2, ..., n]
作为输入我希望唯一的输入是结束数字,但我在没有指定起点的情况下努力做到这一点。
fun createList(start:int, ending:int) =
if(start = ending)
then []
else
start::createList(start + 1, ending);
我希望能够只输入一个数字,例如 6 并得到一个列表,例如:[1,2,3,4,5,6] 我想在不使用外部库的情况下执行此操作喜欢 list.something
这是我被教导的唯一方法,我将不胜感激有关如何改进的提示。
您已经完成了 99%。使用您当前的函数,createList(1, 7)
产生 [1, 2, 3, 4, 5, 6]
。你只需要另一个自动填充其中一个参数的函数。
fun createList(start, ending) =
if start = ending then []
else start :: createList(start + 1, ending);
fun createList'(ending) =
createList(1, ending + 1);
试试这个,createList'(6)
会产生 [1, 2, 3, 4, 5, 6]
。
现在,假设您不希望两者都可见。您可以将一个函数“隐藏”为本地绑定。
fun createList(ending) =
let
fun aux(start, ending) =
if start = ending then []
else start :: aux(start + 1, ending)
in
aux(1, ending + 1)
end;