0

リストのリスト ( など[ [2,3,] , [4,5] ]) を受け取り、 などを返すメソッドを作成する必要があります[2,3,4,5]。ロジックは理解できますが、SML でメソッドを定義する方法がわかりません。これを試しましたが、コンパイルされません

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

2 に答える 2

3

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

これがお役に立てば幸いです。

于 2012-09-09T10:27:35.120 に答える
1

タイプを間違えただけのようです。リストは、何かのリストでなければなりません (例: an int list)。コンテンツの型が無関係である場合は'a、具体的な型の代わりに型変数を使用できます (この場合、 an'a listおよび an 'a list list)。

ただし、ML で型宣言が必要になることはほとんどありません。それらを使わずに関数を書くだけで、コンパイラは変数に対して実行している操作から変数の型を推測できるようになります。

于 2012-09-08T03:15:07.953 に答える