2008-01-01から1年間の記事一覧

value関数(完結)

一応今回で「The Little Schemerの勉強垂れ流し日記」は完結。 残るアクションは1つ。 ということで、今回は*application関数をば。定義は以下。 ;; アクション本体 (define *application (lambda (e table) (_apply (meaning (function-of e) table) (evli…

value関数(その3)

それじゃ、id:yagiey:20081114で紹介した6種類のアクションを実装していくことにする。 まずは*const関数。(半角のアステリスク記号は、はてな記法に解釈されるため、ソースコード以外の箇所では全角文字で表記) 早速定義を示すと、 (define *const (lamb…

value関数(その2)

ようやく読了したよ、The Little Schemer。 ということで、あと2、3回くらいでこの本に関する日記も終わりそう。さて、まずS式を受け取って、そのS式のタイプ(id:yagiey:20081107の表を参照)に応じた動作をする関数(以下、アクション)を返すexpression-t…

value関数(その1)

データとしてのリストを受け取り、それをプログラムとして解釈して評価するvalue関数をつくろうじゃないか、というお話。 たとえば、 (car (quote (a b))) というリスト(関数適用じゃない、データとしてのリスト)に関して、 (value '(car quote (a b))) の…

テーブルから名前の検索

久しぶりにThe Little Schemer。 9章までは終わってたから、最終章の10章をば。 いろんな人が書いたレビューなどによると、この章ではSchemeを用いてScheme処理系を実装するのだそうだ。 The Little Schemerって、「この章の目標は○○が出来るようになる事で…

積読書Get

近くの書店にふらっと寄ったら、Boost C++ Librariesに関する本があったので買ってみた。 最近仕事のC#ばっかりで、C++全然触ってないけど。 そうでなくてもプログラミングの本は腐るほど積読してるのに。さて、読了できるのはいつになる事やら。Boost C++を…

iPod touch買った

無料のアプリを入手せんと張りきっていたのだが、アプリをダウンロードするためにiTunesのアカウントが必要で、iTunesのアカウントを作るにはクレジットカードかプリペイドカードが必要、という仕組み。 そんな素敵仕組みのお陰で、カードを持っていない僕は…

ミニ言語

統計的仮説検定のための俺アプリを作ってて、スクリプト処理用のミニ言語作ろうと思案中。 とりあえずアプリの核となる部分をGUIとは切り離して製作中。 あ!そこのアンタ! 今「車輪の再開発ジャン」とか思ったデショ! 「おとなしくRとかSASとかSPSS使えよ…

コンパイルが止まらねぇー

(define fact/cps (lambda (n cont) (if (= n 0) (cont 1) (fact/cps (- n 1) (lambda (m) (cont (* n m))))))) みたいな継続渡しスタイルの階乗計算をboost::mplでやってみた。 どこか間違えてるみたいで、コンパイルが停止しない。 #include <iostream> #include <boost/mpl/arithmetic.hpp> #i</boost/mpl/arithmetic.hpp></iostream>…

BoostのMPLさわってみる

眠れないので 1 (+ 1 2) (lambda (n) (+ 1 n)) ((lambda (n) (+ 1 n)) 2) 的なλ式をBoostのMPLで書いてみたらどうなるか調べてやってみた。 どこかで聞いたことある「MPLの主な用途は算術計算ではない」というnoticeはneglectな方向で。(ルー的に #include <boost/mpl/arithmetic.hpp></boost/mpl/arithmetic.hpp>…

FizzBuzzをがんばって短くしてみた

C#

twitterにポストできるくらいの文字数でFizzBuzzを書いてみようと思い立ち、仕事中にも関わらずやってみた。 Enumerable.Range(1,100).Select(n=>0==n%15?"FizzBuzz":0==n%5?"Buzz":0==n%3?"Fizz":n.ToString()).ToList().ForEach(s=>Console.Write(s+" "));…

もうC++なんて好きでもないし使いもしない理由。

C++

何が起きたのか? 嫌気が差したんだ。C++のどの面をとっても、その設計は性能と引き換えに私の生産性をうばった。もう一つうんざりなのは, リンカのエラー診断だ。ただライブラリをダウンロードして使うなんてことが決してできない。新しいライブラリを使う…

性的型付け言語

今日は性的型付け言語(Sexually typed language)についての新しい考えを皆さんに紹介します。 これは僕の30回に及ぶ、連続ふられ経験から導き出した理論付けであり、皆さんのプロジェクト遂行における一助になれば幸いです。 Women are statically typed, Me…

よーしパパ、関数に名前を付けずに再帰させちゃうぞぉ!(完結編)

L 以下の関数におけるmk-lengthを自分自身に適用する部分を関数に置き換えてみ。 (コメントの「←ここ」の箇所) ((lambda (mk-length) (mk-length mk-length)) (lambda (mk-length) (lambda (l) (cond ((null? l) 0) (else (+ 1 ((mk-length mk-length) ; ←…

よーしパパ、関数に名前を付けずに再帰させちゃうぞぉ!(その9)

実は、「無名関数で再帰する」っていう目標はすでに達成されてる。(気づいてた? ただ、このままだとリストの長さを調べるという機能限定になってしまう。 そこで、再帰させたい関数を引数として与えると、再帰関数を戻り値(って言っていいのかな?)とし…

Schemeの開発環境

Windowsの再セットアップに伴い、Scheme環境もインストールしなおした。 この機会に備忘録をば。 ちなみに、ほぼhttp://kayui.blog38.fc2.com/blog-entry-45.htmlのコピペ。 emacsとかあんまし慣れてないんで、間違いとかあったらツッ込んでください、口汚く…

よーしパパ、関数に名前を付けずに再帰させちゃうぞぉ!(その8)

今日は体調が悪かったので、仕事を休んだ。 おかげで布団に入って、脳内でいくらでもscheme出来たよ。 その結果、自分のやり方に限界があったんじゃないってことに気づいた。 ((lambda (mk-length) (mk-length mk-length)) (lambda (mk-length) (lambda (l) …

よーしパパ、関数に名前を付けずに再帰させちゃうぞぉ!(その7)

どこまでやったけな...。多分この前は、 ((lambda (mk-length) (mk-length mk-length)) (lambda (mk-length) (lambda (l) (cond ((null? l) 0) (else (+ 1 ((mk-length eternity) (cdr l)))))))) を、 ((lambda (mk-length) (lambda (l) (cond ((null? l) 0)…

どういうこと?

ついったー部に入ろうと、「参加」をクリックすると「すでにパスワードチェックを行っています」というページが延々と表示されて意味が分からん。 入部できない ・゚・(ノД`)・゚・。ウワァン

高階関数と再帰

理解したような気がしても次の瞬間には何が何だか分からなくなっている。 せっかく掴んだ脆く危うい理解も、砂のように指の間をすり抜けてこぼれてゆく。 掴みどころがない。 再帰と高階関数のコラボ。 凶悪極まりない。 発狂しそうだ。 再帰がスタックを食…

よーしパパ、関数に名前を付けずに再帰させちゃうぞぉ!(その6)

L mk-lengthがmk-lengthに渡されたってことは、さらに再帰させるために引数を使うことができるのかな? R そうさ。 mk-lengthを一回使えばlength1ができるよ。 ((lambda (mk-length) (mk-length mk-length)) (lambda (mk-length) (lambda (l) (cond ((null? …

よーしパパ、関数に名前を付けずに再帰させちゃうぞぉ!(その4)

length0_4で使われているlengthは、mk-lengthであっても一向に構わないそうだ。 ということで、今後はこれをlength0_4とする。 (define length0_4 ((lambda (mk-length) ; (*1) (mk-length mk-length)) (lambda (mk-length) ; (*2) (lambda (l) (cond ((null…

よーしパパ、関数に名前を付けずに再帰させちゃうぞぉ!(その5)

「mk-lengthを任意の関数に永遠に適用し続ける必要がないよ」的な素振りを見せつつ、このままじゃ何も状況は変わらなくね? length0_4の要領でlength1_4とlength2_4を書くと (define length1_4 ((lambda (mk-length) (mk-length (mk-length mk-length))) (la…

脳内変換

((lambda (f) (f f)) hoge) から (hoge hoge) へ、スムーズに脳内変換できない。 ((lambda (n) (+ n 1)) 5) から (+ 5 1) へはすぐ変換できるのに。 なかなか高階関数に慣れない。

よーしパパ、関数に名前を付けずに再帰させちゃうぞぉ!(その3)

続き。 length0_3とlength1_3とlength2_3に書き換えることで、結構コードも簡潔になった。 しかし、まだ「名前を付けずに再帰」という目標にはたどり着いてない。 なんとかせんとねー。 L 再帰ってどんなんよ? R mk-lengthを任意の関数へ無限に適用するみた…

卒業式

今日は大学の卒業式だった。 研究室の4年生も巣立って行った。 特に親しくしていた訳ではないけども、もういなくなると思うとやっぱ何か寂しいなァ。 いなくなる人がいれば、新しく来る人もいるわけで。もう新4年生が研究室に顔を出している。 情報系の学生…

よーしパパ、関数に名前を付けずに再帰させちゃうぞぉ!(その2)

続き。 length0_2、length1_2、length2_2には依然として「あるパターンの繰り返し」が見える。 よし、これを取り除いていこうじゃないか、と。

よーしパパ、関数に名前を付けずに再帰させちゃうぞぉ!(その1)

前回は、「defineできない関数が存在するみたいだねー。アハハ」って感じで終わったけど、 defineって何だろう? 再帰的な定義って何だろう? って話題は続いていく。 これ以降、defineせずにリストの長さを求める再帰関数を作る過程を述べている模様。

不安

新しい技術には目もくれず、なぜかScheme。 古い技術は大切だ、とかそういうのじゃなく、ただ楽しいから勉強している。 そんな自分は使えないプログラマなんだろうなぁ。 PHPの勉強も途中で投げ出したし。 こういうことはモラトリアムな学生時代にやっとくべ…

ListとLinkedList

System.Collections.Generic.Listはリスト構造じゃないよねぇ。 なんでListって名前にしたんだろうなぁ。Vectorじゃ駄目だったのかな。 あと、あくまでもSystem.Collections.Generic.LinkedListはノードが繋がってるだけなのね。 Composite的な再帰構造じゃ…