Haskell

自作ライブラリとそれを使った成果物。 LLだとここまでライブラリ化するとreverse使わない場面でもメモリに溜め込みまくったり、それを解消するためにイテレータ作りまくったりする必要があるんじゃなかろうか。 それでなくとも副作用と純粋部分が分かれてな…

自分なりの宣言的プログラミングの定義

関数型言語や論理型言語(Prolog)は宣言的にプログラミングが出来ると入門書には書いてることがあります。 一方で、Javaの本でも宣言的なコードと書かれたものがあります。 どうもメソッド呼び出しのみが並ぶようなコードっぽい。となると、ifやfor等の制御…

Haskellで九九

手続き型言語では、オブジェクト指向全盛になった今もついループで書いちゃう九九。 じゃあ、ループじゃない書き方ってどんなだろう?と思ったので書いてみた。 import Text.Printf kuku =putStr $ concat [nineLines x y | x <- [1..9], y <- [1..9]] where…

HaskellのIOモナドは副作用は有るかも知れないけど、参照透明性は失われてないと思う

すごいH本を読み終えての感想。 IOモナド、あるいはアクションと呼ばれるものは、Haskellの中ではリストやMybeと同列。 ただIO型はモナドのインスタンスにしかなってないだけ。 (まあEqもOrdも出来ないからインスタンスになれないよね…) なのでリストの中…

Haskell入門以前(Kindle版)が消える前に2冊売れてた・・・(ついでに近況報告)

誰ですか。 あんな内容の薄い本にわざわざ99円も払っちゃった人は。自分で書いといてなんですが、99円の価値も無いですよ・・・。 (だから犠牲者が出る前に消したのに・・・)あ、電子書籍を作るために一太郎買いました。 小説は絶対縦書きじゃ無いと嫌です…

Haskell入門以前をアマゾンに出品してみた。…けど、すぐ消した。

パブーにて、無料で公開している「Haskell入門以前」ですが、アマゾンの方が読んでくれる人が多いかな?と、出版してみたのですが…。 何と、アマゾン。無料で出版出来ないんですよ。 99円以上じゃなきゃダメだそうで…。一旦は、99円くらいだったら払ってくれ…

searchコマンドをByteStringで書き直すと上手く動かない・・・

countコマンドのRuby版アルゴリズムにHaskell/Pythonも合わせてみた+メモ化に関する疑問 - しんちゃんの日記で頂いたツムジさんのByteStringを使うと速くなるというアドバイスを元に、こちらのベンチマークのコードPython vs Ruby vs Haskell(文字列検索de…

Haskell入門以前の内容を、微修正しました。

日本語的におかしかった個所や、再帰版reverse関数の説明が少し間違っていたので、修正加えました。 それと、ghciとrunghcは末尾最適化されないと書いてたところも、runghcはどうも末尾最適化してるっぽい事が分かったので、ghciのみと言う書き方に直してい…

countコマンドのRuby版アルゴリズムにHaskell/Pythonも合わせてみた+メモ化に関する疑問

こちらのベンチマークで一位を取ったHaskell vs Python vs Ruby(ファイルの中身の文字数、ワード数、行数を表示するコマンド) - しんちゃんの日記Rubyのアルゴリズムに、Haskell/Pythonもコードを合わせて再度、ベンチマークを取り直してみました。結論から…

Python vs Ruby vs Haskell(文字列検索deベンチマーク)

ファイル名と検索したい文字列を与えると、そのファイルの中で検索文字列がヒットした位置のリスト(又は配列)を表示するプログラムを、Haskell、Python、Rubyで作り、ベンチマークを取ってみました。 こちらMicrosoft OneDrive - Access files anywhere. C…

Ruby版も完成

Python版完成 - しんちゃんの日記に続き、Ruby版も完成しました。 これからベンチマーク取っていきます。 せっかく、pi.datがあるので、膨大な円周率の数列の中から、7777777(7が7つ!)がいくつ有るか検索する。と言うので、ベンチマーク取りたいと思いま…

Python版完成

ファイル中の文字列を検索して、ヒットした位置のリストを表示するコマンド - しんちゃんの日記のPython版、何とか完成。Haskell版に比べると、大分複雑です。 もっと簡単に書けるぞ!!と言う人募集中。 import sys def search(s,str): list = [] x = 0 y = 1…

ファイル中の文字列を検索して、ヒットした位置のリストを表示するコマンド

取り敢えず、Haskell版は完成しました。 初めての検索関数でしたが、何とか作れました。 アルゴリズムに詳しくないので、力押し検索です。 一応、本には力押し検索は意外と有効なアルゴリズムと書いてありましたし、難しく考えなくても有効な手法と言うのは…

関数型言語のパターンマッチはifやswitch/case文の代わりではあるが、仕組み的にはオーバーロードに近い気がする

変な事を書いてすみません。タイトルからして訳が分からないと思うのですが、私が最近思っている、パターンマッチに関する考察です。単純に、よくパターンマッチはifやswitch/case文を書かなくて済む。と言う話があるのですが、使っていくうちに、パターンマ…

Haskell vs Python vs Ruby(ファイルの中身の文字数、ワード数、行数を表示するコマンド)

ファイルの中身の文字数、ワード数、行数を表示するコマンド(他の言語の投稿求む) - しんちゃんの日記のコードをPython/Rubyでも作り、ベンチマーク取りました。 読み込ませたファイルは、スーパーπで生成できる一番大きなπ。3355万桁を収めたpi.datがテキ…

何とかPython版完成

ファイルの中身の文字数、ワード数、行数を表示するコマンド(他の言語の投稿求む) - しんちゃんの日記のpython版が何とか完成しました。 ぶっちゃけ、このコードは簡易wcコマンドの文字数のカウント方法を変えただけなので、"python wcコマンド"でググって…

Python版で早くも挫折

ファイルの中身の文字数、ワード数、行数を表示するコマンド(他の言語の投稿求む) - しんちゃんの日記のPython版を書こうとして、早くも挫折中・・・一応、書いた物載せますが、splitでtabも改行もスペースも中途半端にしか取ってもらえない・・・ なぜ? …

ファイルの中身の文字数、ワード数、行数を表示するコマンド(他の言語の投稿求む)

すみません。 Python,Rubyでも書くつもりで居たのですが、消防団の活動日と、習い事の日と、おまけに選挙の日と、予約してた本が届いた日が重なって、とてもじゃないですけど、ちょっと前に書いたHaskellのコードを載せるのが精一杯になってしまいました。 …

ラムダ式使わないようにrevnumbering書き直したら、nobsunさんに怒られそうなコードになった

自分のコードと発想を元に、なるべくラムダ式を使わない&zipWithを活用する形で書いてみたら・・・・ nobsunさんに思い切り怒られそうなコードが出来上がってしまいました。 nobsunさんのコードナンバリング - Qiitaとは関数の切り分ける処理の単位が違うの…

僕には関数型的発想が足りない(はがない)

ライトノベル、僕には友達が少ない。略してはがない。面白いです。 タイトルがあれなので、電子書籍でしか買う勇気がないですが・・・それはともかく、以前の日記(「ふと、手続き型言語だとちょっと大変かな?と思ったプログラム」のプログラムをPythonとRub…

「ふと、手続き型言語だとちょっと大変かな?と思ったプログラム」のプログラムをPythonとRubyで書いてみた

少し前にふと、手続き型言語だとちょっと大変かな?と思ったプログラム - しんちゃんの日記でファイルの内容を全部逆にしてナンバリングするのは関数型言語では簡単だったのだけど、手続き型言語ではちょっと大変なのでは?と書いたわけですが、本当かどうかP…

Rubyでlength関数を作るのはどうすれば?

Haskell入門以前を書く時、最初RubyとHaskellでコード比較をしようと思っていて、試にlength関数を両方で作ろうと思って、以下のような関数を作ったのですが、数列はうまく動くのに、文字列を渡すとRubyからeachが無いよ!!と怒られてしまい、Haskellとの純…

ふと、手続き型言語だとちょっと大変かな?と思ったプログラム

前回、numberingコマンドを作ってて思ったのですが、手続き型言語はファイルから読む時に1行毎に読むと言うのをコードからも指定している訳ですが、ファイルの中身を全部逆にして、ナンバリングするコマンド(仮にrevnumberingコマンドとします)だと、手続…

C vs Python vs Ruby vs Haskell(ナンバリングdeベンチマーク)

前回の記事が一応の決着を見せたので、次に行こうと思います。 私が思ったよりもHaskellがずっと速かったようで、Haskellは実用的な言語ではないと言う風潮を払拭すると言う目標の前途は明るそうで何よりです。さて、今回のお題はファイルを読み込んで、行毎…

C vs Python vs Ruby vs Haskell(無意味な処理deベンチマーク)

「Haskell入門以前」のネタバレになってしまいますが、[ [1,2,3],[4,5,6],[7,8,9] ]を受け取って、各要素を反転させた[ [3,2,1],[6,5,4],[9,8,7] ]を受け取り、その最後尾の要素の最後尾(このデータでは7)を表示する処理を作り、なるべく大きなデータを渡…

Haskellで実行時間計測用のコマンドを作る

import Data.Time import System.Process import System.Environment import System.IOmain = getCurrentTime >>= \start -> getArgs >>= \(c:cs) -> runInteractiveProcess c cs Nothing Nothing >>= \(_,out,err,_) -> hGetContents out >>= putStrLn >> h…

Haskellでスマフォアプリは開発できるのか?

"Haskell iPhone"や"Haskell Android"で検索すると、こんなページが検索に引っかかりました。Haskell iPhone http://www.haskell.org/haskellwiki/IPhoneHaskell Android http://www.haskell.org/haskellwiki/Android英語は少ししか読めないのですが、iPhone…

GUIならばHaskellでも日本語の問題はない(かもしれない)

import Graphics.UI.Gtkmain = initGUI >> windowNew >>= \window -> vBoxNew True 0 >>= \vbox -> entryNew >>= \entry -> buttonNew >>= \button -> labelNew Nothing >>= \label -> set window [windowTitle := "初めてのWindowアプリ", windowDefaultWid…

Haskell入門以前と言ふ電子書籍の宣伝

ブクログのパブーというサイトにて、Haskell入門以前というタイトルの電子書籍を出版してます。 何分、素人の文章ですので、どんな層をターゲットにしているのか、何を伝えたいのかも定まってないと今更ながら思いますが、無料で公開していますので、良かっ…