2006-01-01から1ヶ月間の記事一覧
[id:lethevert:20060111:p2] EBPからESPまでをコピーして保持しておくだけではダメかな? GCが上手く動かない?
最近、漢字コードを間違えられたことがなかったので、操作を忘れていた。 http://oss.timedia.co.jp/index.fcgi/kahua-web/show/ossz/oneline/2004-12-03 Ctrl-x <ret> c</ret>
SICP p.98 注6に、"closure"という言葉は、全く関連しない2つの概念に使われていて、SICPの本では1つ目の意味でのみ使う、ということが書いてあったのですが、 抽象代数での用法 Lispでの用法 2つ目の用法は、プログラミング言語で一般的なクロージャのこ…
以前、チャーチ数を見たときに、なんか、よく分からないなと思って保留にしていたのだけれど、今、見直してみたら、演算を抽象化して数を表しているのですね。 SICPのEx2.6で、下のように書かれていたけれど、 (define zero (lambda (f) (lambda (x) x))) (d…
ソースコードには、コメントが書かれている方が読みやすいので、いろいろな人がコメントを書きましょうとか言っているのですが、どうやってコメントを書けばいいのかという点について、納得のできる方法論を見たことがありません。 でも、本当は、コメントを…
高いなぁ。
http://www.isl.cs.gunma-u.ac.jp/~shingo/make/7line/7line.html これはすごいな。
昨日、突然思いついたコード。でも、ほんと、何に使えばいいのか分からない。 function CheckBooleanResult: Boolean; asm end; function CheckIntegerResult: Integer; asm end;
TBいただいて、クロージャを何に使うのか、イメージが湧かないとのこと。Delphiを使う方って、あまりこういうプログラミングスタイルになれていないから仕方ないかな、ということで、少し解説してみることに。 何に使えるかはおいおいいろいろ考えていくこと…
[id:lethevert:20060109:p1] なんていうか、しつこいですか? - 構文糖衣に突っ込んでいる方を見かけたので、どこで見た言葉かと考えてみたら、この辺でした。 http://sky.zero.ad.jp/~zaa54437/programming/clean/LanguageReport20/words.htm http://www.sa…
[id:lethevert:20060110] ちょっと修正した。 - 今回作成したクロージャは大きく2種類あるが、 _(@F) _(@F, Init, @Final) 1つめの方は、普通に使われるクロージャで、2つめの方は、クロージャが関数の返値として使われる場合のクロージャです。2つめの…
以上、全てを使ってこういうことができますという例。 重要ポイントだけ抜き出し。 //固定点を求める関数 function fix(maker: IClosure): IClosure; procedure f(data: PI_I; _Maker: PClosure); var __f: IClosure; procedure _f(data: PI_I); begin Apply…
Apply???という補助関数を適宜作ることで、クロージャの呼び出しをラップすることができます。 例) type PSS_S = ^TSS_S; TSS_S = record in0, in1, ret: string; end; function ApplySS_S(F: IClosure; in0, in1: string): string; var call: TSS_S; begin…
クロージャというのは、関数内関数などで、関数が定義されたところの環境(ローカル変数やローカル関数)への参照を維持した関数オブジェクトを作成する機能のことです。 過去の記事 [id:lethevert:20060106:p2] - ファンクタの作成 [id:lethevert:20060107]…
[id:lethevert:20060107:p1]で作成したクロージャを使って、memoizeとfixの問題「[id:lethevert:20050904:p3]」を書こうと思っているのだけれど・・・ maker関数が上手く作れない。というのは、IClosureとPointerを交換できないのだ。(前回、TObjectとして…
http://www.jmuk.org/d/?path=2006/01/08#d08t02 [id:soutaro:20060108] sequenceがあっても、mapがなければループを自前で書く必要があるわけで、じゃあ、ループをfor文なしにどう書くの?といったら、再帰構文で書けるから要らないよ、ってことでしょ、と…
Haskellになぜfor文がないかに悩んでいる人がいるようだ。 [id:nskj77:20051228#1135779719] 答えは簡単。 再帰構文で書けるからだ。これは、ちゃんと末尾再帰を最適化する言語なら、どんな言語でも同じ。 sum n = sum_itr 0 n where sum_itr a 0 = a sum_it…
これは、数列の不動点の近似値を求めるという問題。与えられた式から黄金比の近似値を求めた。
id:lethevert:20060108:p1 で定義した乱数ライブラリを使って回答したのですが、これを使って、参照透過性について多少考察します。 fast_prime_pという関数の内部では、*(Random Int)を生成して、値を取り出して、*(Random Int)を破棄して、取り出した値だ…
これは、素数判定を確率的なテストを用いて行うという問題。fermat-testというテストが本編で解説されていて、問題では、miller-rabin-testというテストを使って書き直すことが求められた。
これは、フィボナッチ数を行列を使って高速に計算するという問題。
id:lethevert:20051230:p1 id:lethevert:20060106:p1 MersenneTwisterは、遅延ストリームを使った擬似乱数の生成ライブラリだけれど、これを使うためには、乱数のシードを用意しなければいけないのですが、これを簡単に取得する方法がなかった。2005/12/30の…
IntegerとPointerについては、ラッパーオブジェクトを作る代わりに、こんな方法が使える。ラッパーオブジェクトはオーバーヘッドと解放の手間があるので、使うならこちらの方が有力。
識別子を短くして、演算子のように見せるために、昨日([id:lethevert:20060106:p2])のファンクタのアイデアを利用しています。 また、関数内関数を任意の場所で呼び出せるように、id:ytqwertyさんのλ with INNER FUNCTIONのアイデアを使っています。
こちらはまとめだけです。詳しい説明は[id:lethevert:20060107:p2]にあります。 まずは、使い方。 function DoLoop(N: Integer; clo: IClosure; obj: TObject): TObject; begin if N > 0 then Result := DoLoop(N-1, clo, clo._(obj)) else Result := obj; e…
[id:lethevert:20060104:p1] 次のような中身のファイル(ファイル名:kernel32_library)を用意して、Clean System Filesフォルダの下に置く。 kernel32.dll GetTickCounticlファイルに次のように記述すれば、dllの関数が呼び出せる。 import code from libr…
Delphiの識別子について、ちょっと発見をしてしまった。 Delphiの識別子の規則は、Perlの正規表現の記法で書くと、こうなるのだが、 [a-zA-Z_][a-zA-Z0-9_]*これを、よく考えると、「_(アンダースコア)」だけで識別子として使用できる。 ということは、こ…
[id:shinichiro_h:20040205#p2] 式を追いかけることはできそうだけど、自力で解けとか言われると無理だ。 0.3678794411714423216 = 1/e なんて気づくべくもなし。 (本当に追いかけられるかな?あとでやってみよう) - ちなみに、元ネタはここ http://hp.vec…
C++のTemplateって、JavaのGenericsと似たようなものだと思っていたのだが、どうもそういうものではないらしいということに気づいた。あ、いや、仕組みが違うってことは知ってたけど、もっと考え方のレベルで違うということだ。 - そもそも、なぜ、C++のTemp…
[id:lethevert:20051023:p1] このときに、ANSI Common Lisp (スタンダードテキスト)の記述を見て、 関数プログラミング 副作用ではなく、返値を使って動作するプログラムを書くプログラミングパラダイム と納得していたのですが・・・ - SICP(Structure and …