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;