Effective JavaのアレをC#で

ねた元はこちら: なんぞこれ。コンストラクタパラメータが異常に大杉る・・・。バカなの?死ぬの?そういう場合はBuilderパターンを検討してみよう。 - Bug Catharsis C#3.0とC#4.0の2つを考えてみました。 まず、ネタ元の本文に このEffective JavaでJoshua B…

文系プログラマのためのF#入門

F#

let 馬鈴薯の f = f "はたらけど" let うす紫の x f = f (x + " はたらけど猶") let 花に降る x f = f (x + " わが生活(くらし)") let 雨を思へり x y = x + " 楽にならざり" + y let 都の雨に = " ぢっと手を見る" let 石川啄木 _ = printfn "%s" [<STAThread>] do </stathread>…

Seq.cache - Memoize

F#って標準でmemoizeもどき君が備わってたような、どんな関数だっけ・・・と思っていた矢先、@igetaさんのつぶやきの中からその関数を発見!白骨!発掘! その名もSeq.cacheさんでした。忘れないように軽くメモしておこうと思います。 > let test1 = seq { f…

Sleeping barber problem

id:sumimさんが投稿された、 居眠り床屋問題 http://ja.doukaku.org/285/ 丁度F#の並列計算を(ちまちまですが、)勉強していたところだったので、標準クラスのMailboxProcessorを使って解いてみました。ここでこれを使うべきじゃないかもしれませんが、まあ…

君達はHD Photoを忘れてないか

最近はJPEG XR(Wikipedia)とも呼ばれているらしいHD Photo. 君達はその存在を忘れてはいないだろうか。 僕は忘れていました・・・。 .NET Framework 3.0からサポートされているため、我々はそれをプログラミングすることが出来る。 GDI+ではなくWPFでの扱い…

Workflowでモナド

seqやasyncの正体はWorkflowというもののようだ。 正確にはComputation Expressionsというのかな?(なんて訳すとカッコいいんでしょう。) CPS変換のシンタックスシュガーみたいだけど、なんとなくモナドに似た感じもある。 最近F#の勉強がおろそかになって…

F# + WPF + Chart

F#

F#の練習(特にオブジェクト指向らへん)。 さて、試してみよう試してみようと思いつつ絶賛放置プレイ中だった、 『Visifire』 という、チャートコンポーネントを今回使ってみた。 無性に使ってみたかったのである。なぜなら無償だから。 Silverlight or WPF…

末尾再帰最適化

F#

末尾再帰がちゃんと最適化されるのかどうか気になったので、出来上がった実行ファイルを逆アセンブルして眺めていました。いちごオレを飲みながら。予想通りですが以下のような結果に。(VS2010βまだ入れてないので、例のごとくF#CTP) 書いたコード: #ligh…

make-concatenated-stream

めもめも。 make-concatenated-streamを使うと、 複数のストリームを連結して1つのストリームとして扱うことが出来る。 CL-USER> (let* ((s1 (make-string-input-stream "hello")) (s2 (make-string-input-stream ", ")) (s3 (make-string-input-stream "wor…

F#でTwitter

F#

.NET Frameworkがあるから簡単! タイムラインを表示するだけの簡単なプログラムです。 #light open System open System.Net open System.Xml let userName = "nobuhisa_k" let pass = "ひみつ☆" let uri = "http://twitter.com/statuses/friends_timeline.x…

コンパイル時計算

以下のようなものも一応コンパイル時計算といっていいんだろうか? On Lispにもコンパイル時計算について書かれているけど、それは実行時のリストのコンシングを避けたり、式の変形を工夫したり etc・・・といった感じだった。 ;; 階乗計算関数 CL-USER> (de…

F#でArrow

練習中のF#(OCaml)でHaskellのArrow, ArrowChoice, ArrowApply, ArrowLoop を書いてみました。 突っ込みやアドバイス歓迎です。 ちなみにOCamlは空き時間などに携帯でWebサイトを見て勉強した(?)だけなので実はあまり自信が無い。。。(多少はPCでも書い…

hash table操作めも

要素を引っ張り出すための関数&マクロのメモ。 ;; 適当なサンプルデータ CL-USER> (setq ht (make-hash-table)) #S(HASH-TABLE :TEST EXT:FASTHASH-EQL) CL-USER> (dolist (x (coerce "my lisp !" 'list)) (setf (gethash x ht) (char-code x)) ) loop マク…

Lispのくせに

ただのお遊び。 Common Lispのくせにリスト内包表記! CL-USER> [ x | x <- '(1 2 3 4) ] => (1 2 3 4) CL-USER> [ x | x <- '(1 2 3 4 5 6 7 8 9) (evenp x) ] => (2 4 6 8) ;; 条件を複数 CL-USER> [ x | x <- '(1 2 3 4 5 6 7 8 9) (evenp x) (< x 5) ] =…

そういえば挨拶書いてなかった気がする

あけましておめでとうございます!! 今年もよろしくお願いします!!2009年 元旦 + 137日

with-gensyms

clispのgen-symsマクロは、生成するシンボル名が第一引数で、gen-symsで生成されるシンボルが格納される変数名は、第二引数以降が該当するみたい。(defmacro (prefix &rest sym-names) &body body)みたいな、シグネチャーで定義されているみたい。 実践Commo…

だから論理論理 切なくて 壊れそうな夜にさえ

Haskellの演算子の定義には色々な記号が使える。ので試してみた。 Unicodeに携帯の絵文字が追加されたらとても楽しいことになりそうですね! さて、知ってる人にとっては結構当たり前(?)だけど、案外気付いていない人が多い気がする、XORとnot equalの関…

C# - IronPython の連係

C#-IronPython間での値の受け渡しが上手くいったのでメモしておこう。 本当はPythonの標準モジュールをIronPythonで読み込んで*1、それをC#で使おう!へいへい!という作戦だったのだけど、時間が無いのでそれはまた次回。 IronPythonの中の作りはコロコロ変…

病んだ少年(仮名:N)の作品

http://www.iduplus.jp/

部分適用

久しぶりにSchemeを触った。 Gaucheが使いたかったので emacs + gauche + quack.el で環境を作ってみた。 やっぱりemacsは嫌いだなぁ。 さて、Schemeでの部分適用はこんな感じのようで。 cut SRFI-26にcutというマクロがあるらしい。 gosh> ((cut * 10 <>) 5…

チーターが

おっこちーたー\(^o^)/ ねこが ねころんだ/(^o^)\ パンダのおやつは パンだ\(^o^)/

combinator

コンビネータとは自由変数を含まないλ項のことをいいますが、Yコンビネータ以外あまり取り上げられていない気がするのですが、これも100年に1度の金融危機の影響かとか、WBC楽しみですねだとか、そういえば今年雪祭り行けなかったんですよとか、最近携帯変え…

CLR/H Tech Day 2009

2/7のイベントの様子を少しだけ公開! と言っても受付係だった僕はセッションを全然見ていないので、イベントの裏側の写真を! 1つ3万6000円のプリンをいただく まあ実際の値段は知りませんが(笑)、俺様は高いんだぜ心して食えよオーラを感じるプリン(お…

CLR/H Tech Day 2009

2/7のCLR/H勉強会はイベント形式です。 最新技術をたっぷりご紹介してしまいます。講師も豪華です。 詳細はこちら http://clr-h.jp/content/NextCLRH.aspx 震えて奮ってご参加ください。Ustreamも一応予定しています。 追記 満席になりましたので、参加申し…

variable capture

マクロの(意図せぬ)変数捕捉について。 ケース1 : 引数がうああ! ってなる ;; こんなマクロを定義したとする CL-USER> (defmacro swap (var1 var2) `(let ((temp ,var1)) (setq ,var1 ,var2) (setq ,var2 temp) )) SWAP CL-USER> (setq a 10 b 20) 20 CL-…

labelsとfletの違い

labelsは主に関数定義を入れ子にしたい場合に用いますが、fletというものもあるみたい。 外側(defun)と内側(labels,flet)の関数名が同一であった場合、内側の関数で再帰呼び出しをすると果たして誰にお呼びがかかるのか。labelsとfletはその時の振る舞いが異…

例外

(* 適当に例外を3つ宣言。楽でいいですね。 *) # exception E1;; exception E1 # exception E2;; exception E2 # exception E3;; exception E3 (* 例外を発生させるだけの子。 *) # let foo = function | 1 -> raise E1 | 2 -> raise E2 | 3 -> raise E3 | o…

レコード型

なんでOCamlのレコード型のフィールド名はみんな同じ空の下で管理されるんだろう。 # type a = { id : string; name : string };; type a = { id : string; name : string; } # type b = { id : string; value : int };; type b = { id : string; value : in…

パターンマッチによる再帰

CL-USER> (defmethod my-fold (f e (ls (eql nil))) e) CL-USER> (defmethod my-fold (f e ls) (my-fold f (funcall f e (car ls)) (cdr ls)) ) CL-USER> (my-fold #'(lambda (x y) (cons y x)) '() '(5 4 3 2 1)) (1 2 3 4 5) 思いつきでmultimethodsでやっ…

関数合成とか部分適用とかリードマクロとか

マクロの復習というか練習というかメモというか。 メモ:マクロを呼び出してる関数をコンパイルするとどうなるの 予想通りといえばの予想通りの動作。 式がインライン展開されてると考えてよろしいのでしょうか。 CL-USER> (defmacro foo! (x) `(setq ,x (+ …