2012-03-26 14 views
0
私はSMLで定義済みのマップ機能と同じことをしてカスタムマップ機能を作りたい

は、私は次のコードを書きましたカスタムマップ機能の標準mlの

val mymap = fn : ('a * 'b list -> 'b list) -> 'a list -> 'b list 

が、定義済みのマップ機能がありますし、リストを取り、リストに関数fを適用し、マップ機能はリストや機能がかかるため、別のリストを返すことができ、今私が取得していますことはあります次の出力:

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

私はここでの問題は何ですか? おかげ

注:私はfoldrやfoldlの機能を使用して、問題は何

答えて

1

をカリー化使用する必要がありますか?あなたが見ることができるだけでなく、問題は、あなたの関数の最初の引数(f)はfoldrへの最初の引数として使用することが間違った型を持っていることです。まず、foldrの最初の引数として、どのような種類の関数が必要であるかを理解する必要があります。

1

あなたはfoldrを適用するリストの各要素について、そのリストの要素、以前の結果(または開始値)をとり、最初のものである関数に両方を渡すことを理解する必要がありますfoldrのパラメータ。あなたが書いたコードで、fは2つのパラメータを取ることを、意味

。そう、各リスト要素に適用されるFを

'a * 'b list -> 'b list 

しかし、マップ機能では、あなたが希望:だからfはリスト('a)とリスト('b list)の値をとり、それが私たちのタイプを提供しますfoldrの最初の引数を抽象化し、fをリスト要素に適用し、その結果を出力リストに追加する必要があります。

関連する問題