【问题标题】:SML Function to make a list from 1 to nSML 函数创建一个从 1 到 n 的列表
【发布时间】:2022-01-14 06:32:34
【问题描述】:

我是 SML 的新手,有点困惑。我正在尝试编写一个名为 makeList 类型为 int -> int list 的函数,该函数将正整数 n 作为输入并返回列表 [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 function input sml smlnj


    【解决方案1】:

    你已经 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2020-08-16
      • 1970-01-01
      相关资源
      最近更新 更多