HaskellとClojureとF#で書き比べ
最近ClojureとF#が気になってしょうがないので、最近楽しませてもらってるPython練習コミュニティサイトCheckiOに掲載されている問題の一つ、words_finder をHaskellとClojureとF#で書き比べてみた。同じ問題の同じアルゴリズムでの解答をそれぞれの言語で解く事でコーディング感覚の違いを知ろうという趣旨。
まずはPythonでの解答 (ネタバレ注意:CheckiOは本来は自分が解答しないと他人の解答は見られない)
def checkio(text, words): span=[] for w in words.split(): for i in range(len(text)): if text[i:i+len(w)].lower()==w.lower(): span.append((i,len(w))) def check(i): return set(a for a,b in span if i>=a and i<a+b) ans='' for i in range(len(text)): c1,c2,c3=[check(j) for j in range(i-1,i+2)] if len(c2)>0 and len(c1&c2)==0: ans+='<span>' ans+=text[i] if len(c2)>0 and len(c2&c3)==0: ans+='</span>' return ans
Pythonはデフォルト言語という位置づけがしっくり来るくらい普通のコードが書ける。
CheckiOの問題は練習問題として良いので関数型言語で解く練習をつづけるつもり。(GitHubレポジトリ作った.)