2

ニュージャージーの標準mlを学習しようとしていますが、リストを反復する方法がわかりません。

現在の関数が値を指定したときに true を返す場合、値と関数のリストを受け取り、文字列の別のリストを返す関数を作成しようとしています。

関数はこのようなものです('a -> bool) * string。つまり、関数とその名前の文字列のペアです。

関数はカリー化された関数なので、「fun itr x xs」のように定義されています。

これを非再帰的に行いたい。

誰でも始めるのを手伝ってもらえますか?

4

2 に答える 2

1

このための自然でわかりやすい関数は、再帰を使用してかなり簡単に記述できます。

fun itr x fs =
  case fs
    of [] => []
     | (f, s) :: fs' => if f x
                        then s :: itr x fs'
                        else itr x fs'

または、関数で明示的に再帰したくない場合は、を使用できますfoldr

fun itr x fs =
  List.foldr (fn ((f, s), ss) =>
    if f x
    then s :: ss
    else ss) [] fs

また、itrこれはあまり有益な名前ではないため、自分がやろうとしていることをよりよく表す別の名前を選択することをお勧めします。

于 2013-02-10T23:55:36.453 に答える