プロが教えるわが家の防犯対策術!

まずHaskellで++演算子にどのような名前がついているのだろうか?
 ”ふつうのHaskellプログラミング” を読んでいるのだが読み方が書いてない。ネットで調べても読み方が書いてない。
どのような名前がついているのでしょうか?
宜しく願います。

続いて本題ですが ”++演算子” は右結合と書いてあります。
ところが ”ふつうのHaskellプログラミング” の問題で

    readTemplate id = readFile $ prefix repo ++ "/." ++ id

=>  readTemplate id = readFile ((( prefix repo ) ++ "/") ++id )

と模範解答がでています。
私の考えでは ”++演算子” は右結合なので

=> readTemplate id =readFile ( (prefix repo) ++( "/" ++id))

なのではないでしょうか?
”+演算子” が左結合なので勘違いをして模範解答をかいたのではないでしょうか?

宜しく願います。

A 回答 (1件)

(++)に限らず,この手のものにはとくに読み方なんぞは


決まってません.
そのまま「プラスプラス」しかないでしょう.

ghciで
:i (++)
とすれば
(++) :: [a] -> [a] -> [a] -- Defined in GHC.Base
infixr 5 ++
と返ってくるので
(++)は
右結合・優先順位5です
「ふつける」のサイトの正誤表には何かないのですか?


Preludeでの定義は
(++) :: [a] -> [a] -> [a]
(++) [] ys = ys
(++) (x:xs) ys = x : xs ++ ys

(++)に関しては右だろうが左だろうが結果は変わらないのですが
あえて右にしてるのは,演算の効率性でしょう
この定義では
第一引数のリストが長いほど再帰呼び出しの回数が増えるのは自明です.
左結合にすると第一引数が長くなる傾向になりますので.
    • good
    • 0
この回答へのお礼

正誤表はあったのか?解りません。
疑問点がわかればそれで良いと思います。

お礼日時:2012/10/13 11:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!