0

リスト内のネガの数を数えるように求められたので、次のように課題を提出しました。

   let nneg = [4; 9; -5; 0; -5; 1];;
   List.filter nneg (fun-> (-))
   List.filter nneg (fun x -> x < 0)

しかし、それは「int リスト -> int」ではなく、「int リスト」です。

だから私はこれを始めましたが、それをパターンマッチする方法を私の人生で理解することはできません:

   let rec rev nneg = match nneg with | [] -> 0 | head::tail ->(filter  tail<0) head;;
4

1 に答える 1

3

リストをフィルタリングしたくありません。intにフォールドしたい。また、呼び出しの引数が間違っています。

# List.filter;;
- : ('a -> bool) -> 'a list -> 'a list = <fun>

したがって、filter は bool とリストを返す関数を受け取る関数です。Filter は、フィルタリングされたリストを返します。フィルタの使用例:

# List.filter (fun x -> x > 0) [1;2;3;-3];;
- : int list = [1; 2; 3]

これは宿題なので、ヒントだけあげます。ここで折り畳み機能を見てください。明らかに、0 以上のすべての要素をフィルタリングしてカウントすることで解決できますが、これには 2 回の反復が必要です。

于 2013-10-25T03:21:43.203 に答える