or1ko's diary

日々を書きます

01-03

言語処理100本ノック 2015

Haskellで何か書きたくなったので、上記のサイトの問題を解いていくことにした。

00. 文字列の逆順
文字列"stressed"の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ.

Prelude> Data.List.reverse "stressed"
"desserts"

02. 「パトカー」+「タクシー」=「パタトクカシーー」
「パトカー」+「タクシー」の文字を先頭から交互に連結して文字列「パタトクカシーー」を得よ.

Prelude> putStrLn $ concat $ zipWith (flip (\x -> flip (:) [x])) "パトカー" "タクシー"
パタトクカシーー

文字と文字を連結して文字列にする関数が見つからず、変な関数を作成してしまった。また、putStrLnを使わないと、コードが表示される。

03. 円周率
"Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."という文を単語に分解し,各単語の(アルファベットの)文字数を先頭から出現順に並べたリストを作成せよ.

Prelude> map length $ words "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechani
cs."
[3,1,4,1,6,9,2,7,5,3,5,8,9,7,10]

wordsという関数は久しぶりに使った。

04で詰まったのこれで終わりかも。