nobsun (a.k.a. やました です) > 仕様を考えれば全くその通りだと思います。ですがだからといって > 言語仕様に忠実に書けばいいかと言うと、ぼくはそう思いません。 > いくら引数が一つであると言ってみても、現実にプログラム書いて > エラーが出てデバッグしようってときには引数の数という情報は絶対 > に必要です。 いえ、「引数は1つ」と主張すべきだと言っているわけではないです。 現実にプログラムを書たり、デバッグするときに、重要なのは 「関数の引数の数」ではなく、「関数の型」だといいたかったのです。 たとえば、 pOr p q x = if p x then True else q x のような、関数を定義したときには、pOr のパラメータはどうします? 3パラメータですか? でも pOr の意図は、どちらかといえば、関数を作りだす関数として使う ことなので、与えられた二つの述語のどちらかを満す述語を作る関数であり、 2パラメータとした方がいいですよね。 pOr :: (a -> Bool) -> (a -> Bool) -> a -> Bool (使い方) pOr p q または p `pOr` q (解説) 述語 p と述語 q のどちらかを満す述語 ... てな感じでどうですか。 > またパラメータを書いているのは引数の数を主張するためでなく > 解説文で参照するためです。例えば > > elemIndices (x xs) :: (Eq a) => a -> [a] -> [Int] > > xs から x を探索し、見付かった全インデックスのリストを返す。 > > のように。でないと > > 第二引数から第一引数を探索し、…… > > と書くしかなく、余計に引数の数を主張する結果になるでしょう。 > 日本語の説明は (ぼくが) 絶対に欲しいので少なくともパラメータ > 名は必須です。 > > ただ括弧は必要ないし、最初は書いていなかったのですが、 > > elemIndices x xs > > だと関数名とパラメータが対等に見えるのが嫌だったのと、 elemIndices (x xs) :: Eq a => a -> [a] -> [Int] は、やめましょうよぉ。(違和感ありすぎ^^;) elemIndices :: Eq a => a -> [a] -> [Int] (使い方) elemIndices x xs (解説) x に等しい xs 中の要素の全インデックス てな感じでじゃだめっすか? > xs \\ ys :: .... > > のようなインフィックス演算子と通常形式とを簡単に (シンタックス > のみで) 区別するのに楽だったのでこうなっています。 (\\) :: Eq a => [a] -> [a] -> [a] (使い方) xs \\ ys (解説) 。。。 のようにセクションを使うのがよいのでは、 > > foldr f init [] = init > > foldr f init (x:xs) = f x (foldr f init xs) > > > > のように定義がそのまま書いてある方がわかりやすいと思います。これは > > 定義では不十分でないと思ったからこそ日本語の説明を書いてます。 > そして同じことを書くんだったら Haskell での定義のほうが正確に > 決まってますから、日本語の説明は正確さよりもとにかくイメージが > つかめる記述を優先しています。全部に実例が書いてあるのは日本語 > で (意図的に) 誤っている部分の補正をするためでもあります。 日本語の説明がいらないという意味ではなく、手続き的説明より、宣言的 説明のほうがむしろわかりよいのではという印象をもったということです。 この辺は趣味の問題でしょうか。 > > href で重要な部分は、使用例だと思います。これがあるから、href は > > 大変すばらしいツールになるのだと思います。 > > (この部分が、Haskell のリファレンスでもすっとも重要だと感じますし、 > > 実際この部分がいちばん希求されているものだと思います。) > > そうですね。ぼくも Haskell のリファレンス読んでて一番ムカついた > のがロクに実例がないってことでした。それでとにかく実例だけは > しつこく付けてやろうと思って書いてます。 期待しています。(他力本願モード^^;) -- Nobuo Yamashita mailto:nobsun / sampou.org I love programming. http://www.sampou.org/ I love pencil puzzles. http://www.puzzle.jp/ -- ML: haskell-jp / quickml.com 使い方: http://QuickML.com/