haskellをスクリプト言語っぽく

runghcを使わないとコンパイルしなくてもいいらしいので

#!/usr/bin/runghc

import System

main = do cs <- getArgs
          print cs

といった感じで使える。

でも、遅いのであまり役にたたなさげ。

あと、今週末はふつけるの1,2部を読み直してみて、型まわり(9章)をよく読んだ。

ProductName ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門
青木 峰郎
ソフトバンククリエイティブ / ¥ 2,940 ()
在庫あり。

あとlengthは要素を評価しないとかいうくだりを読んでデータコンストラクタとか型コンストラクタって関数みたいだとか思ったら、まぁそんな認識でよいらしい。

3.4 「無限の」データ構造

Haskell の非正格な性質の利点のひとつは、データコンストラクタもが非正格であることです。このことはべつに驚くべきことではありません。コンストラクタは特殊な関数にすぎません(ふつうの関数との違いは、パターンマッチで使われるということです)。たとえば、リストの構築子、: は非正格です。

Type (の最後のほう)

静的型という制約を、抽象化のための思考の道具として使う

やさしい Haskell 入門 (バージョン98)をじっくり読んでみよう。

MeadowでHaskell

最近のhaskell-modeはhaskell-site-fileをロードするだけでよいらしい。.emacsに書いておいた。

(load "c:/Meadow/site-lisp/haskell-mode-2.4/haskell-site-file.el")

これで、C-cC-lでghciが起動してファイルをロードしてくれるので楽だ。 今はHaskellプログラミングを読んだり解いたりしてる。ちなみに和田先生のルービックキューブのやつとか難しくてわからんのでスキップしたが、その次のメモ化の章はやたらとおもしろい(まだ消化してないけど)

type State s t = s -> (t,s)

とかやって関数の型を抽象化してるんだけど、いまいちついていけない自分の理解力がもどかしい。

入門Haskell買った

昨日TOEICがあったので先週はiKnowばっかやってた。TOEICの出来は微妙なとこだけど、ちょっとiKnowの効果は出たみたい。ディクテーションよいですな。あと単語力上げるのにもいいが、やっぱdiaryをつけねばならんね。

で、合間に本物のプログラマはHaskellを使うとかHaskellプログラミング読んだりとか。っつーかこっちのほうが難しすぎ。2005-8のメモ化の話で何日か考え込んでた。

さて、英語もひと段落したので年始からはまりっぱなしのHaskellでもと、入門Haskellを購入して読むことにした。

ProductName 入門Haskell―はじめて学ぶ関数型言語
向井 淳
毎日コミュニケーションズ / ¥ 2,730 ()


一気に4章まで読んだ。明日は通院なので待ち時間に5章のモナドのとこ読みつつ、サメガメ作り(6章)をやる予定。

少しいろいろやってみてからこの本を読むと面白さが伝わってきてよい。解説のとことか、ほーなるほど、あーそうなんだと思うようなことが多かった。ふつけるはHaskellを知ろうっていう構成なのに対して入門HaskellはHaskellで書こうって感じの本だなぁという印象。

で、Haskellでもっと書こうって思ったときにこの先何を読めばよいのかわからんなーってのがHaskellの悩みどころですな。

とかやってみて、

  • ParsecでPDBパーサーを書いてみる
  • HappSいじってみる

とかかなぁ。perlとかpythonは探せば(上達の)階段らしきものは得られるのに、Haskellだと、いきなり20階ぐらい上にエレベーターで飛ばされる気分なんだよな。この間を埋めるいい書籍とかWebの情報はないのかなー。

wxHaskell入れた

入門Haskellの6章はsamegameをつくろうの章だ。

haskellの標準GUIのHGLで簡単なサンプルでもと動かそうとしたら、動かん。どうもWindowsでは標準から外されたらしい。

あらーん、ということで、じゃぁwxHaskellでもと思ったが、こっちもなんか開発とまってんの?って感じで最新のHaskellには対応してなさげ。コンパイルすればいいのかねー。うーん。

と悩んでいたら、6.8.1だったらOKらしい。おーありがたいと早速入れた。

で、入門Haskellのサイトのwxsamegameを動かしてみた。

samegame

ちゃんと動いてるよ!。ちょっとうれしい。

入門Haskellさめがめ中

6.3まで。隣り合ったマスを再帰でマークしていくあたりとか、おーなるほどと。この章はコード書くときの流れ的なものが感じられておもしろいです。

ProductName 入門Haskell―はじめて学ぶ関数型言語
向井 淳
毎日コミュニケーションズ / ¥ 2,730 ()


あとこれって3次元に拡張すれば、結構簡単に蛋白質のリガンド結合ポケットの穴をグリッドで表現出来そうじゃんと。今度やってみようかな。再帰は素敵だ。

Stateモナド

おーなるほどー。

そしてまたモナドのすべてを読む

構文解析器結合子

今週末は娘が昼寝をしなかったので、自分の時間がほとんどとれず。 しかも今日などは娘は寝なかったのに僕のみお昼寝をするという失態をやらかしてしまった。

やらかしたというよりはプログラム・プロムナードの2006年2月号を読んでうーんとうなっているうちに睡魔に襲われ、落ちてしまったというところ。

Haskellのインデント

下の感じのコードを書いたら、

do let ...
   if ... then
      ...
   else
      ...

インデント間違えてへんか?みたいなエラーが出まして、どうも、elseは ifよりも下げないといけないようだ、Haskell的には。

なんでifとelse揃えたらあかんのやー

WikiBookのdo within ifってところに書いてあった。doのなかでインデント揃えちゃうと;が入ってるものとみなされるから

do { first thing
   ; if condition
   ; then foo
   ; else bar
   ; third thing }

と解釈されてしまうらしい。

HaskellでNetwork.HTTPを入れてみた

perlでいうところのLWPでいいのかな。標準では入ってなかったのでここから。windowsにはdarcs入れてなかったのでlinuxの方にインストール

$ darcs get http://darcs.haskell.org/http/
$ runhaskell Setup.lhs configure
$ runhaskell Setup.lhs build
$ runhaskell Setup.lhs install

これでOK。あとはtestデイレクトリにget.hsっていうサンプルがあるので、コンパイルして動かしてみる。そのあとソースを眺めて理解する(それはこれから)

で、その後RESTなURIにでもアクセスしてみて受け取ったXMLをパースしてみる予定。

余談だが、fedora8だとdarcsはyumから入れられる。

yum install darcs

でオッケーだったような。

perl5.10使用時にmacportでghcをインストールするときのメモ

ghcをインストールしようとしたらperl5.8が必要らしい。 perl5.10をdeactivateしてからperl5.8をactivateしたら

$ sudo port activate perl5.8
--->  Activating perl5.8
Error: port activate failed: Image error: /opt/local/bin/corelist already
exists and does not belong to a registered port.  Unable to activate port perl5.8.

こういう場合には

$ sudo port -f activate perl5.8
$ sudo port install ghc

perlを5.10にもどす

$ sudo port deactivate perl5.8
--->  Deactivating perl5.8
$ sudo port activate perl5.10
--->  Activating perl5.10

これでOK