2012-03-25 7 views
0

私は、標準のmlでintのペアのリストを取る関数を作ろうとしています。そして、そのペアからmax要素を含むintのリストを返すべきです。 (int * int) list -> int list。これまでのところ、私はコードを書いたことがありますが、それは動作しませんし、私はそれが与えたエラーから問題を理解することができません。ここでmax pairs function standard ml

はコードです:

- fun maxpairs x = 
= foldr (fn (a, b) => if a > b then a else b) [] x; 

そして、ここでは、私が取得していますエラーです:

stdIn:15.2-15.50 Error: operator and operand don't agree [overload] 
    operator domain: 'Z 
    operand:   'Y list 
    in expression: 
    (foldr (fn (<pat>,<pat>) => if <exp> then <exp> else <exp>)) nil 

答えて

1

foldrはタイプ('a * 'b) -> 'bの機能、種類'bの値と型のリストを取り['a] 。あなたの場合、リストはペアのリストであり、タイプ'bの値は空のリストです。つまり、機能の意味はfn (a,b) => ...aとなり、bはリストになります。 >を使用してabを比較しようとします。 >は、左のオペランドとしてペアを使用し、右のオペランドとしてリストを使用することができないため、動作しません。また、then-expressionとelse-expressionの型が異なるif文を持つことはできません。

もし私があなただったら、私はこのために地図を使用しました。これは折り畳みを使うよりも問題に適しているようです。

+0

Ohh大丈夫、私は参照してください それはマップ関数で働いた ありがとうsepp2k –