X10という言語

もしかしたら使うかもしれないので、X10という言語について調べてみた。
本家Webページは http://x10-lang.org/index.php にある。並列計算が書きやすいように工夫されたJavaといった感じ。
処理系はEclipseのプラグインであるX10DTを入れるのが簡便みたい。
最新バージョンであるX10DT 2.2.2.2のインストール方法は、 http://x10-lang.org/documentation/getting-started/x10dt-installation.html にあるとおり。自分はEclipse Update Managerを使ったインストールをした。

とりあえず、チュートリアルに載ってるサンプルを動かしてみる。

packageInfo not found for ...

Leksahがパッケージの情報を読んでくれなくなった。
具体的には、システムのモジュール一覧にほとんど何も表示されなくなったり、保管が効かなかったりする。
http://groups.google.com/group/leksah/browse_thread/thread/c2f7b51dacb19d14/76a1c94bdc8f6ac0?lnk=raot
に同じ症状の人がいるので、とりあえず、Leksahを再コンパイルしたけど、変わらず。

# haskell-updater --all

としてHaskellのパッケージ総て再インストールしても変わらず。
http://code.google.com/p/leksah/issues/detail?id=182 を参考にして

# ghc-pkg recache

をしても変わらず……

追記:

# ghc-pkg recache
$ ghc-pkg recache --user

というようにrootとユーザで何度か再キャッシュしたら読めないパッケージが変わった

Haskellでグラフを書くには

Chartとかgnuplotが便利そう。

使い方はそれぞれのサンプルから引用すると、
gnuplotの方は、

plotList [] (take 30 (let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in fibs))

plotListStyle [] (defaultStyle{plotType = CandleSticks}) (Plot2D.functionToGraph (linearScale 32 (0,2*pi::Double)) (\t -

plotFunc [] (linearScale 1000 (-10,10)) sin
plotFuncs [] (linearScale 1000 (-10,10)) [sin, cos]

plotParamFuncs [] (linearScale 1000 (0,2*pi)) [\t -> (sin (2*t), cos t), \t -> (cos t, sin (2*t))]

let xs = [-2,-1.8..2::Double] in plotMesh3d [] [] (do x <- xs; return (do y <- xs; return (x,y,cos(x*x+y*y))))

Chartの方は、

renderableToWindow (toRenderable $ plotLayout $
                    plot [0,0.1..10] sin "sin(x)") 640 480

plotWindow [0,1,3,4,8] [12,15,1,5,8] "o" "points"

plotPDF "foo.pdf" [0,0.1..10] sin "- " cos ". " cos "o"

plotPS "foo.ps" [0,0.1..10] (sin . exp) "- " (sin . exp) "o-"

と言う感じらしい。

……gnuplotの例の各行の式はそれぞれ型がIO ()で非常にわかりやすいのだけど、Chartの方の型は

Graphics.Rendering.Chart.Simple.PlotWindowType t => t

っていうように、型クラスのインスタンスになっているけど、そのままIO ()を要求される場所(つまりmain)に置けば動いた。そもそも、plotWindowなどは可変長引数をとっているように見えるけど、型が

forall a. PlotWindowType a => a

だし、よく分からない……

実装を見た感じだと、

[a] -> t1 -> IO ()
[a] -> t1 -> t2 -> IO ()
[a] -> t1 -> t2 -> t3 -> IO ()
[a] -> t1 -> t2 -> t3 -> t4 -> IO ()
--以下省略
{-ただし、aはNumのインスタンスで、t1, t2, ...はPlotArgのインスタンス-}

がPlotWindowTypeのインスタンスとなるよう定義されているみたい。

オブジェクト指向

オブジェクト指向についてあまり親しんでいないので、
勉強しないといけないなと思った。

一応、gaucheでクラスやメソッドを作ったりしたことはあったけど、
理論的に考えて設計したことは今まで無いので。

アラビア語始めました

アラビア語を始めてみた。
昔からアラビア文字が気になっていたことと、失われた古代ギリシャの文献がアラビア語に訳されて保存されているかもしれないという逸話を聞いたことが直接のきっかけだと思う。
ついでに、コンピュータ上での文章の処理に非常に興味があるので、RTL (Right-To-Left アラビア語やヘブライ語、昔の日本語のように右から左に横書きする書記体系)で一番厄介そうなものを知っておくことで損はしないかなとも思う。

ついでに、ArabTeXという、結構きれいに組んでくれるパッケージがあるので、TeX使いにはお勧め。

自動定理証明器用のoverlayを作ってみた

形式的仕様検証ツールあたりは、すでにfmportっていうのが存在するけれど、
E Proverなどのebuildは見つからなかったので、自作して公開することにした。

https://github.com/na4zagin3/proof-overlay

使い方

まず、/etc/layman/layman.cfgの

overlays  : http://www.gentoo.org/proj/en/overlays/repositories.xml

ってなっている行を探して、

overlays  : http://www.gentoo.org/proj/en/overlays/repositories.xml
            https://raw.github.com/na4zagin3/proof-overlay/master/overlay.xml

のように一行追加する。

そうしたら、

# layman -L | grep -e 'proof'

として、proofオーバーレイが認識されているされていることを確認した上で、

# layman -a proof

とすれば完了。