
[code]

    manlen p1 p2 = abs(fst p1 - fst p2) + abs(snd p1 - snd p2)
    points n = [(x,y) | x <- [-n .. n], y <- [-n .. n]]
    mancircle n = [p | p <- points n, manlen (0,0) p == n]
    
[/code]

最後のリスト内包表記内の、`manlen (0,0) p == n`がよくわかりません。  
manlen の引数に p == nを取っているのはなぜなんでしょうか？


CC BY-SA 3.0
2017-03-27T17:49:40.267
33589
2017-03-28T07:46:06.423
2017-03-28T07:46:06.423
20272
12896
question
haskell
「manlen (0,0) p == n」の解釈について


haskell では `==` のような両側に引数を取る infix の演算子の優先順位は、普通の関数呼び出しより低いです。したがって `manlen
(0,0) p == n` は `manlen (0,0) (p == n)` ではなく`(manlen (0,0) p) == n`と解釈されます。これは
Bool を返すのでフィルターになります。従って

[code]

    mancircle n = [p | p <- points n, manlen (0,0) p == n]
    
[/code]

は、`points n`の要素の中で`manlen (0,0) p`が n になるものだけを返します。


CC BY-SA 3.0
2017-03-27T18:21:16.227
33590
2017-03-27T18:21:16.227
3605
33589
answer