2006-06-01から1ヶ月間の記事一覧

Concurrent Clean : CleanJ : StdString

StdBool, StdChar, StdReal, StdStringの移植を進めている。 とりあえず、StdStringをテストプログラムまで確認。

Java : 関数型オブジェクト指向のススメ : 素数列挙と遅延評価

昨日の応用で、遅延評価を使った素数列挙です。 こういうケースでは、 Object o = null; Object get() { if (o == null) { //oの作成 } return o; }みたいにやりがちですが、今回はちょっと趣向を変えました。 では、実例を。 interface Primes { int get();…

Java : 関数型オブジェクト指向 : 継続

Javaは型付きSchemeだ!、というわけで、関数型オブジェクト指向を気の向いたときに適当に書く連載(?)です。 今回は「継続」。 作るものはカウンター。 普通にJavaでカウンターを作ると・・・ interface Counter { int get(); Counter next(); } static C…

Concurrent Clean : StdList : avg

ABCマシンの動作の調査で、ABCコードをトレースしているときに気づいたこと。 標準関数にあるavgという関数 avg:: !.[a] -> a | / , IncDec a avg [] = abort "avg called with empty list" avg x = accavg zero zero x where accavg n nelem [x:xs] = accav…

Concurrent Clean : CleanJ : 型クラス

型クラスのところでつっかえている。 型クラスの実体がレコードであることは理解。 build_r, push_r_args, repl_r_args_a の3つの命令を移植することが当面の目標。 理解が進んでから、.record命令を移植。 - やっぱり、型クラスの移植方法を早めに考えない…

Concurrent Clean : CleanJ : L.L.Ring : キミならどう書く 2.0 - ROUND 1 -

[id:lethevert:20060616:p2] : 素直な回答 [id:lethevert:20060617:p1] : 頭部非ボックス化正格リスト [id:lethevert:20060617:p2] : gccとの速度比較 [id:lethevert:20060619:p1] : 高速化編 先の記事で、嘘を書きました。高速化ポイント1つ目です。最初の…

Concurrent Clean : L.L.Ring : キミならどう書く 2.0 - ROUND 1 - 高速化編

[id:lethevert:20060616:p2] : 素直な回答 [id:lethevert:20060617:p1] : 頭部非ボックス化正格リスト [id:lethevert:20060617:p2] : gccとの速度比較 ここまで、コードの外形には触れずにいましたが、コードの外形を変えて高速化してみましょう。 Start = l…

オブジェクト指向とクロージャと私 : Scheme : Java : OCaml

[id:lethevert:20060615:p3] - 脳内Scheme [id:lethevert:20060617:p5] - OCamlのオブジェクト指向 かなりcontroversialなところにわざわざ突っ込む奴。 私が、オブジェクト指向をサポートしている言われている言語を使う際に期待することは、次のようなこと…

Concurrent Clean : CleanJ : CountChange

次のプログラムの動作を確認。 Start = cc 21 [500, 100, 50, 10, 5, 1] cc :: Int [Int] -> [[Int]] cc _ [] = [] cc amount coins=:[big_coin: other_coins] | amount < 0 = [] | amount == 0 = [[]] | otherwise = [[big_coin: a] \\ a <- cc (amount - b…

Concurrent Clean : CleanJ : 配列の選択

次のプログラムの動作を確認。 Start = arr.[3] where arr :: {#Int} arr = {a \\ a <- list} list = [1..10]実行結果 $ java test02.Select 4

Concurrent Clean : CleanJ : takeWhile

次のプログラムの動作を確認 Start = takeWhile ((>=) 10) [2..]実行結果 $ java test02.TakeWhile2 [2,3,4,5,6,7,8,9,10]

Concurrent Clean : バグ見つけた : TakeWhile

//TakeWhile f l :== takeWhile f l TakeWhile f l :== takeWhile l

Concurrent Clean : L.L.Ring : キミならどう書く 2.0 - ROUND 1 - 速度比較

Cleanの実行速度がどの程度かということを確認。比較するのは、gccの次のプログラム。10000までの素数のうちで最大の素数を表示します。 #include <stdio.h> #define LEN 10000 int primes[LEN]; int main(int argc, char** argv) { int i, j, k, b; j = 0; for (i=2;</stdio.h>…

Concurrent Clean : L.L.Ring : キミならどう書く 2.0 - ROUND 1 - 番外編:1,000,000個めの素数

チューニングとはCleanのための言葉です!! かどうかは知りませんが、Cleanは、Haskellとは違ってプログラムを効率化するテクニックが多いので、数が多くなっても平気。 もともとの関数定義はこれ。 nth_prime n = primes !! n primes = map hd $ iterate f…

Concurrent Clean : 素数列挙とメモリについて

ところで、誤解を受けそうなので説明を追加しておくと、先の例でメモリを圧迫する理由は、(!!)を使っているからで、takeしてprintするなら、常にリストの頭部が評価されるのでメモリを圧迫することはないです。 と思ったのですが、よくよく考えてみると、(!!…

OCaml : オブジェクト指向 : Java

http://www.jmuk.org/d/?path=2006/06/15やらhttp://jijixi.azito.com/cgi-bin/diary/index.rb?date=20060616やらに刺激されて、ちょっとOCamlのオブジェクトシステムで遊んでみた。 ・・・これいいな・・・ 構文に目が慣れていないので、目が回る感じがある…

Concurrent Clean : Haskell : ポイントフリースタイル(続き)

[id:lethevert:20060613:p3]にhttp://www.tom.sfc.keio.ac.jp/~sakai/d/?date=20060615#p02からTBいただいた。あと、http://www.jmuk.org/d/?path=2006/06/15#d15t03にも書かれているのを発見。 私が予想していたものは、方向性として違っていないようなので…

Concurrent Clean : L.L.Ring : 『キミならどう書く 2.0 - ROUND 1 -』 : 100までの素数を列挙

module Primes import StdEnv, OptEnv Start = takeWhile ((>=) 100) primes primes = ps [2..] where ps [n:nr] = [n: ps $ filter (\x = (x rem n) <> 0) nr]たしか、もっとスマートな方法があったような気がするんだけど・・・ - 思い出した。iterateを使…

Concurrent Clean : CleanJ : snapshot更新

snapshotもsubversionに登録してみました。 http://svn.sourceforge.net/viewcvs.cgi/cleanj/snapshots/ 最新は、cleanj.20060615.zipです。 http://cleanj.sourceforge.net/

オブジェクト指向と関数型と私

[id:m-hiyama:20060615]からTBがきて、改めて考えをまとめる。(前の記事は、オブジェクト指向の話じゃなくってキャリアの話だったので)*1 - といっても、正直に言って、私がちゃんと理解していると言えるオブジェクト指向言語は、Javaぐらいしかないので、…

L.L.Ring

http://ll.jus.or.jp/2006/event/session ここにConcurrent Cleanが並ぶほど知名度が上がる日は来るだろうか? ところで、Gaucheって、言語名じゃないでしょ?

著作権管理

http://plusd.itmedia.co.jp/lifestyle/articles/0606/12/news005.htmlを見て。 著作権侵害に対して神経質になる必要があるのって、実は、作者本人ではないんだよなとか思ったり。 大量に複製して、それを流通に載せる中で、非常に多くの関係者がいて、これ…

メモリ効率

http://www.jmuk.org/d/?path=2006/06/14#d14t01より 関数型言語によらないですが、言語の処理系による最適化によって、メモリ効率を気にしなくて済むようになる頃には、32bitマシンなんて過去の遺物になって、通常のファイルくらいならメモリマップしてしま…

Concurrent Clean : CleanJ : 配列

次のプログラムが動作するようになりました。 Start :: ({#Real}, {#Int}, {Int}, {#Char}) Start = ({1.1,2.2,3.3}, {1,2,3,4,5}, {1,2,3,4,5}, {'a','b','c','d'})実行結果 ({1.1,2.2,3.3},{1,2,3,4,5},{1,2,3,4,5},"abcd")

Concurrent Clean : CleanJ : create_array_

メモリ上に配列領域を確保する命令は、create_array_です。 create_array_ Descr ASize BSize Descr :: 型名(INT, REAL, レコード型名など。指定のない場合は'_') ASize :: ボックス化されたオブジェクト1つ分の領域のサイズ BSize :: 基本値1つ分の領域…

Concurrent Clean : CleanJ : create_array_ (2)

続き。 代数データ型は、非ボックス化できない。タプルも、非ボックス化できない。しかし、レコード型は非ボックスができる。 次のような代数データ型は、次のようにコンパイルされる。 ::MyAlgS = MyAlgS !Int !Int.record k5 dii 0 2 "MyAlgS"こういう代数…

Concurrent Clean : Haskell : ポイントフリースタイル

ポイントフリースタイルって、頭の体操以外の観点で、どういうメリットがあるんでしょう? Cleanを使い始めてしばらくたちますが、特にポイントフリースタイルを採用したいという気にならないのですが、Haskellをキーワードにふらふらしていると、時々見かけ…

Concurrent Clean : 論理右シフト

論理右シフトがない。標準の>>は、算術右シフトだ。 Start = -16 >> 2結果 -4

Java : Strategyパターン

[id:w_o:20060611:p2]って、いわゆるStrategyパターンじゃない?とか思った。 まず、宇宙船クラス。 class SpaceShip { double x = 0.0; double y = 0.0; double idou_kyori_x() { ... } double idou_kyori_y() { ... } void move() { if (mover != null) { …

アルファベットコード

プログラミング言語の名前で、アルファベットコードを作ってみる。 A : Ada B : Brainfuck C : Clean D : Dylan E : Eiffel F : Forth G : Groovy H : Haskell I : Icon J : Jovial K : KRC L : Lua M : Miranda N : NQC O : Oberon P : PostScript Q : QUIC…