ジンジャー研究室

長めのつぶやき。難しいことは書きません。

Haskellでコードゴルフするためのメモ

明日プロダクションコードで使える無駄知識。

変数を1文字にする

基本ですね。

空白を入れない

なるべく隣接させる

  • 各種記号
$ . + - * / : ++ !! |
  • クォーテーションの類
'' "" `` () [] {}
  • 数字の次
2in

改行しない

;で改行できます

型を書かない

型推論の恩恵に預かりましょう。

@を活用する

引数を同時に展開できます。

f a@(_,y)=y+g a

括弧の代わりに$を使う

基本ですね。

map f(g a)
map f$g a

カリー化

これも基本です。

f a=g a
f=g

もっとカリー化

ポイントフリーしていきましょう。

f a=g(h a)
f a=g.h a
f=g.h

何度も使う関数を別名にする

長い名前の関数ほど有効。

a=length

関数をpublicにする

whereの中に居る必要の無いものは外に出します。

mapよりもリスト内包表記

多くの場合、リスト内包表記の方が短くなります。

let-inよりもwhere

1文字分だけ稼げます。

f a=let x=g a in x
f a=x where x=g a

concatよりも>>=id

1文字分だけ稼げます。

concat["a","b"]
["a","b"]>>=id

1文字の結合にconsを使う

Stringは[Char]なので。

" "++a
' ':a

ガード節を使う

if-then-elseより短くなる。
ガード節は関数のトップレベルでも使用できる。
otherwiseの代わりにTrueが使える。

f a=if a>5 then 1 else 0
f a|a>5=1|True=0