【问题标题】:SML method that accepts a list list and returns a list接受列表列表并返回列表的 SML 方法
【发布时间】:2012-09-15 22:58:56
【问题描述】:

我需要创建一个获取列表列表(如[ [2,3,] , [4,5] ])并返回类似[2,3,4,5] 的方法。我可以计算出逻辑,但我不知道如何在 SML 中定义方法。我试过了,但它没有编译

    fun appendall(l:list list):list = ...

【问题讨论】:

标签: functional-programming sml typing smlnj


【解决方案1】:

看看 List 库中的 concat 函数。

Moscow ML version 2.01 (January 2004)
Enter `quit();' to quit.
- load "List";
> val it = () : unit
- List.concat [[1,2],[3,4],[5,6]];
> val it = [1, 2, 3, 4, 5, 6] : int list
- quit();

另一种解决方案是使用 List.foldr

val concat = List.foldr op@ [];

或者你可以把它写成一个递归函数

fun concat2 [] = []
  | concat2 (x::xs) = x @ concat2 xs

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    看来您只是输入错误。列表必须是某物的列表(例如 int list)。如果内容的类型无关紧要,您可以使用类型变量 'a 而不是具体类型(在您的情况下,'a list'a list list)。

    但是,您几乎从不需要 ML 中的类型声明。只需编写没有它们的函数,编译器就可以从你对它们执行的操作中推断出变量的类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      • 2012-07-22
      • 2020-10-28
      • 1970-01-01
      • 2012-09-06
      相关资源
      最近更新 更多