2

別の関数に渡された関数に基づいて、別の値を返す必要があります。

したがって、与えられた:fun inc x = x + 1;

と:fun double [] = [] | double (h::t) = 2*h::double (t);

私が取り組んでいる関数を呼び出すことができるはずです。

呼び出し例 (作成している関数の名前は test です):

test (inc, 5);- そして、それは6を返します

-また-

test (double, [1,2,3,4]);- そしてそれは[2,4,6,8]を返します

関数が額面どおりにこれを行うことができないことは知っていますが、これは抽象化のレイヤーを通じて可能ですか?

4

1 に答える 1

7

確かに、それは可能です:

fun test (f, x) = f x

testこれは(('a -> 'b) * 'a) -> 'b、int を返す関数 ( などinc) を渡すと結果が int になり、リストを返す関数を渡すと結果がリストになることを意味します。

補足として、doubleより簡単に/慣用的にfun double xs = map (fn x -> x*2) xsorとして定義できますval double = map (fn x -> x*2)

于 2010-09-02T21:37:17.833 に答える