メソッド数の多い組み込みクラスを列挙
ああ…、ごめんなさい。大事な但し書きを忘れました。orz
可能であれば、継承したメソッド数は含まずに、そのクラスで定義(再定義も含む)されたメソッド数のみをカウントしてください。
言語処理系ごとに、普段目にするクラス群において、最大、どのくらいのメソッドを定義したクラスが存在するのか(心情的に許容されるのか)を知りたかったのですが、継承されたメソッドを含めてしまうと、階層が深くなるほどメソッド数が多くなる当たり前の傾向を見るだけになってしまうので…
おなじ理由で、メタクラスを持たない言語では、static メソッドについてもカウントから除いてください。もし数える場合でも別物としてカウントしてください(SomeClass -> 15, SomeClass static -> 5 というように)。
おそらく、わざわざ static メソッドだけ個別にカウントせずとも、省いてしまっても結果には影響しないだろうと思われます(static メソッド数が上位10番に入るほど多く定義されているクラスは存在しないと予想されるので)。
Posted feedbacks - Haskell
ghc 限定.Preludeからエクスポートされているclassは15個しかないので全部列挙 (10個に限定するなら,コード中のコメントアウトされている部分をuncommentする) 括弧内がメソッドの数
実行例: *Main> :main Floating (18) RealFloat (14) Enum (8) Ord (7) Num (7) Integral (7) RealFrac (5) Read (5) Monad (4) Show (3) Fractional (3) Eq (2) Bounded (2) Real (1) Functor (1) ... number of classes : 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import Data.List
import Data.Ord
import System.Process
data ClassInfo = CI { className :: String, numberOfMethods :: Int }
main = do { res <- readProcess "ghc" ["-e",":browse Prelude"] []
; let cis = classInfos [] $ lines res
; let n = length cis
; putStr $ unlines {- $ take 10 -}
$ map showClassInfo $ sortBy (flip (comparing numberOfMethods)) cis
; putStr $ unlines ["...","number of classes : "++show n]
}
showClassInfo :: ClassInfo -> String
showClassInfo (CI name n) = name ++ " (" ++ show n ++ ")"
classInfos :: [ClassInfo] -> [String] -> [ClassInfo]
classInfos a [] = a
classInfos a (l:ls)
| head lw /= "class" = classInfos a ls
| otherwise = classInfos (ci:a) ls''
where
lw = words l
ci = CI name (if null ls' then 1 else length ls')
(ls',ls'') = break (not . (" " `isPrefixOf`)) ls
name = case break ("=>"==) lw of
(_,[]) -> head $ tail lw
(_,lw') -> head $ tail lw'
|
すみません。プレビューせずに、形式をまちがえてupしたので実行例がこわれてしまいました。orz 実行例だけupします *Main> :main Floating (18) RealFloat (14) Enum (8) Ord (7) Num (7) Integral (7) RealFrac (5) Read (5) Monad (4) Show (3) Fractional (3) Eq (2) Bounded (2) Real (1) Functor (1) ... number of classes : 15




sumim
#9197()
Rating-1/5=-0.20
言語処理系に組み込みの全クラスについて、それぞれに定義されているメソッド数が多い順に上位10番目までのクラス名とメソッド数を出力するコードを書いてください。全クラス数も示してください。
なお、「組み込み」「クラス」「メソッド」などについては、必要であれば、その言語にふさわしい対象や機能に適宜読み替えてください。(たとえば、組み込み→標準添付、クラス→型・モジュール・パッケージ…、メソッド→関数・プロシージャ…といった具合に)
2 replies [ reply ]