昨日加入したての たけをです。

 早速、初心者質問かもしれないんですが・・・


 まず、s(整数の配列の配列)の要素のうち、eが含まれる配列のみを
filterして返す関数 includes を作りました。

includes 		:: [[Int]] -> Int -> [[Int]]
includes s e		= [x|x<-s, element x e]

--element は 整数の配列にeが含まれるかどうかを返す
element			:: [Int] -> Int -> Bool
element [] _		= False
element (x:xs) y	
	| x == y	= True
	| otherwise	= element xs y


 さらに、このincludesを利用して、sの要素のいずれかに整数eが含ま
れるかどうかを返す関数を、考えなしに次のように定義しました。

isIncluded		:: [[Int]] -> Int -> Bool
isIncluded		= (\s e -> s e /= []).includes

 でも、この定義中に自分で書いたλ式が何を意味するものか、自分で
わからなくなってきました(^^; 型を調べると、

Main> :t (\s e->s e /= [])
\s e -> s e /= [] :: Eq a => (b -> [a]) -> b -> Bool

となっていて、sが(b->[a])に、eがbに対応するんだろうなぁ、とは
思うんですが、includes の型とどうマッチするんでしょう?


 関連して、hugs上でこのλ式を評価してみると

Main> (\s e -> s e /= [])
ERROR - Cannot find "show" function for:
*** Expression : \s e -> s e /= []
*** Of type    : (a -> [Integer]) -> a -> Bool

となって、エラーに出力される型が :t で返してくるものと微妙に違い
ます。特に "[Integer]" と、勝手にIntegerがバインドされている様
なのですが、これはどういう事なのでしょうか?

---
IMAI Takeo <usitukai / osk.3web.ne.jp>


--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/