2007-10-01から1ヶ月間の記事一覧

K&Rを読もう(42) 演習4-3 - 4-10 変数機能つきRPN電卓

GCC

今回の演習は逆ポーランド電卓。多機能になるような演習問題で結構楽しかったです。 さて、早速遊んでみます!! 逆ポーランド電卓なのでちょっと変態的な構文です。順にいきましょう。 まずは四則演算 1 1 + 2 1 2 3 4 5 + + + + 15 3.1415 10 * 10 * 314.15…

あなたは関数型?手続き型?

当たりすぎて恐い。 Functioal Programming IAT

[Scheme] SICPを読む(61) 図形言語の準備(2) アインシュタインがやってきた。

ぜぇぜぇ。興奮気味(笑世界中飛び回って探しました。University of Massachusetts LowellのHolly A. Yanco教授のページで公開されている図形言語は、なんと、「画像にも対応」しかもDrSchemeで動く!!素晴らしいです。Index of /~holly/91.301/Spring2006/ps4…

Schemeの評価順序

Schemeは括弧の中を先に計算するのかと思っていたが、どうやら違う。Schemeの評価順序を調べてみた。 実験 まずはC言語で。 int i = 1; printf("%d", i + ((i = 5), 2)); // 7 絶対使わなそうな書き方だけど、C言語では括弧の中が先に評価されるから、括弧の…

SICPを読む(60) 図形言語の準備 ひげぽんの図形言語をMrEdで動かそう

僕はVimperなのでMzSchemeを愛用してます。しかし、MzScheme単体ではウィンドウを表示することが出来ないため、図形言語を試すことが出来ません。今回の図形言語ではPLT/MzScheme付属のPLT/MrEdというソフトを使うことにします。 ひげぽんの図形言語を貰って…

今日の昼飯

今日の昼飯は「HLTサンド」ハム・レタス・トマトって、OS自作erの為にあるんじゃないかと!! 更にアボカドを加えて・・・。HALTサンド!! 僕、ハム派になっちゃった。

SICPを読む(59) 問題 2.42 - 2.43

エイトクイーンパズルの問題。 問題 2.42 - 2.43 Louisさんと同じ考え方しか出来なかった・・・僕も全手を洗い出してフィルタをかけているようにしか見えなかった。仕方ないので、回答を見た。「エイトクイーンパズルは人間と同じ考え方を適用しているだけだ…

SICPを読む(58) 2.2.3(2) 写像の入れ子 と 問題 2.40 - 2.41

順列の問題です。頭の中が混乱した。 話題の中心は mapをfor文のように使ってみてはどうだろうかという話題らしい。 混乱したのは問題の定義 混乱したところを分割して読むと。 与えられた整数nに対して 1 正の整数(i, j) i + jが素数になるもの。 「j と随…

継続を使って末尾再帰の最適化。

call/ccを使って末尾再帰の最適化に挑んでみます。階乗がおなじみなので、階乗にした。 まずは反復で。 traceが入ってるけど、反復バージョンの階乗。 (define (fact n) (define (iter m aac) (if (= m 0) aac (iter (- m 1) (* aac m)))) (trace iter) (ite…

継続わかった!!

ようなきがする。なんだ・・・継続ってそういうことか・・・。 Karetta|Gaucheプログラミング(立読み版)|継続渡しスタイル丁寧で素晴らしい解説。感謝!! 追記 やっぱりわかってなかった(笑

見てはいけないものを見てしまった気がする

あちゃ。地雷を踏んでしまったらしい・・・。 な・ん・と SICPには続編があった!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! orz オンライン版。 Structure and Interpretation of Classical Mechanicsアマゾン。Structure and Interpretation of Classic…

SICPを読む(57) 問題 2.37 - 2.39

どうやら僕のSICPリーディング速度はかなり遅いらしい(汗回りが凄い人達だらけなので、圧倒されないようにマイペースで行こうと思う。 問題 2.37 ベクトル演算の問題。行列があんま得意じゃない。つうか数学全般的に。 (define v '(1 2 3)) (define w '(4 5 …

SICPを読む(56) 問題 2.36 転置行列

はまりまくってしまった。答えに至るまでの過程を書いてみたい。 問題 2.36 与えられた行列の足し算をする問題。 (define s '(( 1 2 3) ( 4 5 6) ( 7 8 9) (10 11 12))) ; => (22 36 30) 他の言語なら一瞬で解けそうな問題だが、僕にはさっぱり答えが出てこ…

SICPを読む(55) 問題 2.33 - 2.35 accumulateの問題

accumulateと書くのが面倒なので、互換性のあるsrfi-1のfold-rightを使います。ついでにsrfi-26もお試しで。 問題 2.23 穴埋め問題。軽い軽い。 (define (map p sequence) (fold-right (lambda (a b) (cons (p a) b)) '() sequence)) (map (cut + 10 <>) (io…

手続きのカリー化?

カリー化についてはよくわかってないけど、srfi-26がやたら便利そうだ。SRFI 26: Notation for Specializing Parameters without Curryingメモ。 (cut * 2 <>) とやると、 (lambda (x) (+ 2 x)) になる。 実際使ってみた方が早い。 ((cut * 2 <>) 10) ; 20 (…

Schemeのevalでらくちんデバッグ

evalを活用して、っと。 (for-each (lambda (f) (display (eval (cons f '(tree)))) (newline)) '(sum-tree mul-tree reverse-tree)) 21 720 (6 (5 (4 3) 2) 1) うっほ。かなり使える感じがする。こんなときは・・・抽象化(笑 (define (debug tests args) (f…

抽象化ってこういうことか。

抽象化ってこういうことか。(高階関数の使い方)部品化してしまえばツリーのトラバースは全て抽象化出来る。 共通する部品がいくつも出てきたはずなのにこの手を思いつかなかったとは・・・くそぅ。悔しい!!写経しよう写経・・・

SICPを読む(54) 2.2.3(1) 公認インターフェイスとしての並び

むむぅ。 引数としてリストを取り、奇数である葉の二乗の和を計算する 引数として数値を取り、偶数のフィボナッチ数列のリストを作る プログラムを見てみよう。 (define (sum-odd-squares tree) (cond ((null? tree) 0) ((not (pair? tree)) (if (odd? tree)…

リスト修行(4) SchemeでHTMLを書こう(2)

Schemeのリストを解析してHTMLを構築します。朝の続きです。イメージタグのリストなんですが、 (img ((src "hoge.gif"))) 解析してみると、 <img src="hoge.gif"></img> 空の子要素に対応しきれてません(汗もうちょっとインテリジェンスにxhtml対応したいところ。 色々変わってきたので…

リスト修行(3) SchemeでHTMLを書こう

HTMLって閉じタグ書くのが面倒ダヨネ。Schemeで書けば閉じタグ要らないじゃん!!と思ったので、今回の修行はリストをHTMLに変換してみたいと思います。 仕様 リストの先頭はタグで始まり、子要素が続く。タグはシンボルで書く。 ひとつめの子要素が2重のリス…

文字列演算スゲー

感動した。 Prelude> "abc " ++ "def " "abc def "ふむふむ。文字列演算は++か。 $で繋げるかなぁと思って、 Prelude> (++ "abc ") $ "def " "def abc "はぁ?逆になったぞ。んじゃぁ、こうか。 Prelude> ("abc " ++) $ "def " "abc def "出来た。ナンダコノ…

ふつける(1) 2.3 - 2.8 リスト

って、いきなりリストっすか!?早いっすよ・・・。 リストについて リストはSchemeと同じように、最後に「空リスト」が入ってる。「空リスト」は「くうリスト」と読むらしい。僕は「からリスト」って読んでた。 Haskellのリストは型が揃ってないとダメ。自由…

Haskell mode for Vim

omni補完、ヘルプ、デバッグなどお便利機能満載。Haskell mode for Vimいい感じかも。 激しく使えそうなコマンドが、 :GHCi mainghciで関数mainを作用させられる。 ちょっと面倒なので、~/.vim/after/ftplugin/haskell.vimにをmapしてっと。 function! s:Get…

K&Rを読もう(41) 4.2 逆ポーランド電卓の写経

GCC

今回はプッシュバック式文字読み込みを使った逆ポーランド電卓。K&Rの序盤戦の山場かもしれない。さて、上手くできたかな? 1 2 3 4 5 6 7 8 9 10 +++++++++ 55 1 2 3 4 5 6 7 8 9 10 ********* 3628800おぉぉぉぉ。そうだ!括弧を付けてみよう〜。 (1 (2 (3 …

かんたんRoR 5日目 日本語表示

今回は、GetTextを使った日本語表示。これといって難しい所もなく。 あ、えぇもん発見。Patrick Lenz氏のRails本PDFが60日間無償ダウンロード400ページ近い内容が無償で読める。内容は入門〜中級位まで。英語が読める人ならオススメ。僕は無理かなぁ・・・。

Vim+MzSchemeでマクロが・・・

もうひとつの懸案事項だったマクロも解決!Vim+MzSchemeでdefine-syntaxやdefine-macroをそのまま使ってしまうと、「トップレベル変更は出来ない」と言われるので、モジュールで囲む。 (module s mzscheme (define-syntax L (syntax-rules () ((_ . args) (la…

買った本

そういえば買った本を全然書いてなかった。ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門作者: 青木峰郎,山下伸夫出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/06/01メディア: 単行本購入: 25人 クリック: 314回こ…

Vim+MzSchemeでファイル入出力が・・・

Vim+MzSchemeでファイル入出力時のディレクトリ指定がおかしかったのですが、解決しました。~/.vim/after/ftplugin/scheme.vimあたりに以下を追加。 if has("mzscheme") :mz << EOF (current-library-collection-paths (map (lambda (p) (if (bytes? p) (byt…

ふつける(0) 1.1 - 2.2 Hello, Haskell World!!

通称「ふつける」と呼ばれる、ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門作者: 青木峰郎,山下伸夫出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/06/01メディア: 単行本購入: 25人 クリック: 314回この商品を含む…

リスト修行(2)

Gaucheのマニュアルを見ていたら、Gauche リファレンスマニュアル: SRFI-1 リスト構築子 circular-list elt1 elt2 ... [SRFI-1] 指定した要素をもつ循環リストを構築します。 (circular-list 'z 'q) => (z q z q z q ...) "循環リスト"そ・そんなものがあっ…