05/12/18 15:50:07
もしかして、最近Cleanユーザ増えてますか?
そうであれば、僕の独り言状態になってるのでそろそろ終了しようかと思います。
N体問題 URLリンク(shootout.alioth.debian.org)
(特徴 :: 一意構造体の一意配列がある。*{*Planet})
改良したら 188行 が 100行位? // 実質部分40行位 (型・データ宣言・ライブラリ化されてもよさそうな関数等を除く)
になりました。実行速度重視版(+3行程度)で Cの2倍時間が書かる程度 (1.5倍改善 windowsで実装中)。
この *{*Planet}の *Planet部分を更新するため dummy::{*Planet} を常に持ち運ぶ必要があります。
結果としてかなり綺麗に書けましたが大変でした。
実際にコード書かないと、わからないことは多いと思いました。
便利そうな関数
stdioBy f w :== exec w where
exec w#!(io, w)= stdio w
#! (_, w)= fclose (f io) w
=w
//例
Start world #! (e,bodies) = energy N $ momentum ini_bodies
#! (e2,bodies) = energy N $ advance (toInt arg1) N 0.01 dummy dummy bodies
= stdioBy (\io-> io <<< toStringWith 9 e <<< "\n" <<< toStringWith 9 e2 <<< "\n") world
where N = size ini_bodies
Haskell.icl dcl というのを 作ってます 一例
($) infixr 1
($) a b :== a b