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

簡易S式のパーサを作るだけで、えらい時間がかかってしまったので、しょぼくれている

Concurrent Clean : 再帰データ構造の生成

たとえば、整数のリストを受け取って、奇数だけのリストを返す関数は、 oddList :: [Int] -> [Int] oddList [] = [] oddList [i:ir] | isOdd i = [i:oddList ir] = oddList irと定義しますが、これを、 oddList :: [Int] -> [Int] oddList [] = [] oddList […

Concurrent Clean : 遅延評価が便利な点

trivialながら、こういう書き方ができるのは、Cleanが遅延評価だからですね。 f str | size str < 2 = Nothing | isDigit c = Just $ digitToInt c = Nothing where c = str.[1]つまり、最初の条件が偽なら、cは評価されないのでエラーにならない。だから、c…

Concurrent Clean : CleanJ : 関数の内部形式の戦略変更

今、メイン関数とエクスポート関数とインターナル関数の3種類を区別してレコードを作っているのですが、これをやめて、「ラベル+コード=1レコード」というシンプルな構造に変更します。どうも、それで必要十分らしいことが分かってきたので。

Concurrent Clean : CleanJ : snapshot更新

というわけで、snapshot更新しました。 今回は、パターンマッチができるようになりました。テストケースはfactorialです。 module Main import StdEnv Start = factorial 10 factorial 0 = 1 factorial n = n * factorial (n-1) - この後は、リストをやって…

Java : 配列のequals()メソッドがぐったりな件

たとえば、 public class Comp { public static void main(String[] args) { int[] a = new int[] { 1, 3, 8, }; int[] b = new int[] { 1, 3, 8, }; System.out.println(a == b); System.out.println(a.equals(b)); System.out.println(java.util.Arrays.eq…

Concurrent Clean : レコード型がぐったりな件

やや遅れ気味ですが。 前にも書いたことがありますが、Cleanのレコード型も同じぐったりさがあります。 たとえば、 ::Complex = { re :: Real, im :: Real }だったら、他にre, imを使っているレコードを定義していなければ、 let pi = { re = 3.14, im = 0.0…

Concurrent Clean : CleanJ : snapshot更新

http://www.geocities.jp/lethevert/softwares/clean/customize.html タプルが使えるようになり、以下のプログラムが実行できるようになりました。 module Main import StdEnv Start = (1,2,3) - 次は、リストにしようかと思ったのですが、条件分岐を先にや…

Concurrent Clean : CleanJ : Java : goto

Javaにはgotoがなかった! なので、jmp_trueなどの分岐命令を素直に書けない。 jasminなら可能なのだけど。 なので、それぞれの代替部をメソッド化することに。

Concurrent Clean : CleanJ : プリティプリンタ

プリティプリンタの件だけど、toString()をオーバーライドすればいいことに気づいた。 というか、Javaの場合は、プリティプリンタはtoString()をオーバーライドするのが定石だった。

Delphi : 64bit : 関数呼び出し

64bit Windows向けのDelphiの関数呼び出しの規約ってどうなっているんだろう?とふと思った。 http://hp.vector.co.jp/authors/VA028375/delphi/delphipascal_xx_lambda.html ↑の技は、64bitになってもそのまま使えるのだろうか?

Concurrent Clean : CleanJ : タプルと配列

Javaのarrayをどう使うか。シンプルに考えると配列に使うのだろうけれど。 配列よりもタプルの方がCleanでの使用頻度が高いことを考えると、タプルの方がシンプルなデータ構造を用いる方がパフォーマンスが良いはず。なので、タプルをJavaのarrayで表現して…

Concurrent Clean : タプル

ABCコードを追いかけていたら、タプルは33要素以上の要素をもつことはできないような気がした。 で、試してみた。 Start = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 ,21,22,23,24,25,26,27,28,29,30,31,32,33)結果はコンパイルエラー。32要素な…

Concurrent Clean : CleanJ : snapshot更新

http://www.geocities.jp/lethevert/softwares/clean/customize.html module Main import StdEnv Start = "abc" +++ "123"というプログラムが動作するようになりました。

Concurrent Clean : CleanJ : ABCマシン : buildh, fillh

buildh, fillhは、2種類のオブジェクトの生成で使われる。1つは、カリー化関数オブジェクトで、もう1つはデータ構造オブジェクト(リストや配列など)。この2つは、ABCマシン上では同じものとして扱われるようだ。 .desc指令でオブジェクトの基本情報が…

ソースコードがひどいんです。

仕事の話ですが。設計図も含めて、書いたのは自分です。段々ヤヴァくなってきました。 多システムとの接続部分で、マルチスレッドがごちゃごちゃしているところなので、ごちゃごちゃするのは仕方ないとはいえ・・・。 きっと、設計図レベルで間違いがあるの…

Concurrent Clean : CleanJ : snapshot更新

http://www.geocities.jp/lethevert/softwares/clean/customize.html もうちょっといろいろできるようになりました。 implementation module Lib import StdEnv plus_s :: !Int !Int -> Int plus_s a b = a + b plus_l :: Int Int -> Int plus_l a b = a + b…

Concurrent Clean : CleanJ : ABCマシン : 文字列

Cleanの文字列は、非ボックス化文字配列です。それに対して、Javaの文字列はStringオブジェクトです。 Javaで非ボックス化文字配列を表現するならば "char[]" ですが、Stringオブジェクトで扱う方がJavaVMでの扱いが効率的になるのではないかと思うのですが…

またつながらない

また、Cleanの公式ホームページ(http://www.cs.ru.nl/~clean/)につながらなくなってしまいました。 困るなぁ。

技術者は経営に興味を持つべきか?

技術者は技術のことだけを考えていてはいけないということを、昔からよく耳にするのですが、その耳にする文脈では違うでしょと思うものの、文脈を離れた場合には技術以外にも興味を持つべきだというのは本当だと思います。 よく聞く、技術者が技術のことだけ…

素人くさいSICP読書会

どうも、かなり盛り上がってきている様子。

椅子はいいんだけど・・・

私の職場は、椅子はいいものを使っているのだけれど、机とのバランスが悪いので、いまいち肩がこって・・・

Lispは初めから関数型だったのか?

[id:ytqwerty:20060510:p1]より。 歴史のことはあまり知らないので、嘘を言っているかもしれないですが。 Lispは、λ計算を元に作ったらしいので、そういう意味では、初めから関数型指向だったのは間違いないと思います。Lisp 1.5は、Schemeのようなレキシカ…

Concurrent Clean : CleanJ : 目標

CleanJの開発の目標は、サーブレットで動作するWikiを作るところに置こうと思っています。Parsec*1を使って、Wiki記法を解釈するパーサが書けそうなら、それも目標に含めようと思います。せっかくなので、継続ベースの記述ができるように工夫しておこうと思…

Java : Jasmin : CleanJ

CleanJの出力を、JavaにするかJasminにするか、どちらにどういうメリットがあるのだろう? Jasminを使うことで、Javaではできない最適化が可能かを考えてみたが、それはあまりなさそうな気がする。 classファイルの生成速度はJasminを使った方が速くなると思…

Concurrent Clean : CleanJ : snapshotを公開しました

http://www.geocities.jp/lethevert/softwares/clean/customize.html 次のような、非常にシンプルなプログラムが動作するようになりました。 module Main import StdEnv Start = 1 + 1本当は、GW中にここまでやりたかったんですけどね。

Curry-Howard 対応

ふむふむ ちなみに、ちょうど『「前二者を知っている」人』で、Curry-Howard 対応を聞きかじった程度の人がここに一人。

Concurrent Clean : 公式ホームページ http://www.cs.ru.nl/~clean/

[id:lethevert:20060416:p2]でつながらないとか言っていましたが、やっとつながるようになった模様。

仕事で使うプログラミング言語はどうでもいいか?

これは、2種類の答えがあって、言語による差はないともいえるし、言語によって差があるともいえます。いや、論理的な屁理屈を言っているのではなくって、実感として。私は、職業プログラマで、今のところ普段のお仕事では業務アプリケーションのプログラミ…

設計 : ウォーターフォールモデル擁護

[id:lethevert:20060505:p2](コメント欄含む)の続き。 おそらく、最も批判の対象とされる開発手法のひとつだと思いますが、ソフトウェア設計のことを考える上では、非常に重要な概念を多く含んでいるものだと思います。 ソフトウェアの開発サイクルを『「…