0

次の型シグネチャを使用して、SML でリストを出力する関数を作成する必要があります。

     val printGenList = fn : ('a -> 'b) -> 'a list -> unit

「printGenList」は、関数 f とリスト l の 2 つの引数を取り、関数 f をリスト l の各要素に再帰的に適用します。

私はMLが初めてなので、実装することはできませんが、異なる型の署名を与えるこのコードを試しました

     fun printGenList = CONS(fib, fn => printGenList fib fibs);

 where,  fib is
        fun fib a b = CONS(a, fn => fib b (a+b));
 and fibs is
        val fibs = fib 0 1;
4

1 に答える 1

2

あなたがやろうとしていることは不可能です.MLの型システムはこのタイプのポリモーフィズムをサポートしていません. あなたがグーグルなら、これにアプローチする方法を示すSML用のいくつかのprintfライブラリがあります-t印刷したいタイプごとに、個別のt -> unit関数を定義してそれらを一緒に構成する必要があります。

EDIT:ああ、なるほど、あなたはどんなタイプのリストを出力する関数を探しているのではなく、リストの'a->'bすべての要素に関数を適用する高次関数を探しています...私の間違い。これはあなたが必要とするものです:

val rec printGenList = 
 fn (f : 'a -> 'b) =>
    (fn [] => ()
    | x::xs => (f(x); printGenList f xs))
于 2013-11-15T17:26:14.487 に答える