2007-10-01から1ヶ月間の記事一覧
今回の演習は逆ポーランド電卓。多機能になるような演習問題で結構楽しかったです。 さて、早速遊んでみます!! 逆ポーランド電卓なのでちょっと変態的な構文です。順にいきましょう。 まずは四則演算 1 1 + 2 1 2 3 4 5 + + + + 15 3.1415 10 * 10 * 314.15…
当たりすぎて恐い。 Functioal Programming IAT
ぜぇぜぇ。興奮気味(笑世界中飛び回って探しました。University of Massachusetts LowellのHolly A. Yanco教授のページで公開されている図形言語は、なんと、「画像にも対応」しかもDrSchemeで動く!!素晴らしいです。Index of /~holly/91.301/Spring2006/ps4…
Schemeは括弧の中を先に計算するのかと思っていたが、どうやら違う。Schemeの評価順序を調べてみた。 実験 まずはC言語で。 int i = 1; printf("%d", i + ((i = 5), 2)); // 7 絶対使わなそうな書き方だけど、C言語では括弧の中が先に評価されるから、括弧の…
僕はVimperなのでMzSchemeを愛用してます。しかし、MzScheme単体ではウィンドウを表示することが出来ないため、図形言語を試すことが出来ません。今回の図形言語ではPLT/MzScheme付属のPLT/MrEdというソフトを使うことにします。 ひげぽんの図形言語を貰って…
今日の昼飯は「HLTサンド」ハム・レタス・トマトって、OS自作erの為にあるんじゃないかと!! 更にアボカドを加えて・・・。HALTサンド!! 僕、ハム派になっちゃった。
エイトクイーンパズルの問題。 問題 2.42 - 2.43 Louisさんと同じ考え方しか出来なかった・・・僕も全手を洗い出してフィルタをかけているようにしか見えなかった。仕方ないので、回答を見た。「エイトクイーンパズルは人間と同じ考え方を適用しているだけだ…
順列の問題です。頭の中が混乱した。 話題の中心は 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リーディング速度はかなり遅いらしい(汗回りが凄い人達だらけなので、圧倒されないようにマイペースで行こうと思う。 問題 2.37 ベクトル演算の問題。行列があんま得意じゃない。つうか数学全般的に。 (define v '(1 2 3)) (define w '(4 5 …
はまりまくってしまった。答えに至るまでの過程を書いてみたい。 問題 2.36 与えられた行列の足し算をする問題。 (define s '(( 1 2 3) ( 4 5 6) ( 7 8 9) (10 11 12))) ; => (22 36 30) 他の言語なら一瞬で解けそうな問題だが、僕にはさっぱり答えが出てこ…
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 (…
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…
抽象化ってこういうことか。(高階関数の使い方)部品化してしまえばツリーのトラバースは全て抽象化出来る。 共通する部品がいくつも出てきたはずなのにこの手を思いつかなかったとは・・・くそぅ。悔しい!!写経しよう写経・・・
むむぅ。 引数としてリストを取り、奇数である葉の二乗の和を計算する 引数として数値を取り、偶数のフィボナッチ数列のリストを作る プログラムを見てみよう。 (define (sum-odd-squares tree) (cond ((null? tree) 0) ((not (pair? tree)) (if (odd? tree)…
Schemeのリストを解析してHTMLを構築します。朝の続きです。イメージタグのリストなんですが、 (img ((src "hoge.gif"))) 解析してみると、 <img src="hoge.gif"></img> 空の子要素に対応しきれてません(汗もうちょっとインテリジェンスにxhtml対応したいところ。 色々変わってきたので…
HTMLって閉じタグ書くのが面倒ダヨネ。Schemeで書けば閉じタグ要らないじゃん!!と思ったので、今回の修行はリストをHTMLに変換してみたいと思います。 仕様 リストの先頭はタグで始まり、子要素が続く。タグはシンボルで書く。 ひとつめの子要素が2重のリス…
感動した。 Prelude> "abc " ++ "def " "abc def "ふむふむ。文字列演算は++か。 $で繋げるかなぁと思って、 Prelude> (++ "abc ") $ "def " "def abc "はぁ?逆になったぞ。んじゃぁ、こうか。 Prelude> ("abc " ++) $ "def " "abc def "出来た。ナンダコノ…
って、いきなりリストっすか!?早いっすよ・・・。 リストについて リストはSchemeと同じように、最後に「空リスト」が入ってる。「空リスト」は「くうリスト」と読むらしい。僕は「からリスト」って読んでた。 Haskellのリストは型が揃ってないとダメ。自由…
omni補完、ヘルプ、デバッグなどお便利機能満載。Haskell mode for Vimいい感じかも。 激しく使えそうなコマンドが、 :GHCi mainghciで関数mainを作用させられる。 ちょっと面倒なので、~/.vim/after/ftplugin/haskell.vimにをmapしてっと。 function! s:Get…
今回はプッシュバック式文字読み込みを使った逆ポーランド電卓。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 …
今回は、GetTextを使った日本語表示。これといって難しい所もなく。 あ、えぇもん発見。Patrick Lenz氏のRails本PDFが60日間無償ダウンロード400ページ近い内容が無償で読める。内容は入門〜中級位まで。英語が読める人ならオススメ。僕は無理かなぁ・・・。
もうひとつの懸案事項だったマクロも解決!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/after/ftplugin/scheme.vimあたりに以下を追加。 if has("mzscheme") :mz << EOF (current-library-collection-paths (map (lambda (p) (if (bytes? p) (byt…
通称「ふつける」と呼ばれる、ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門作者: 青木峰郎,山下伸夫出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/06/01メディア: 単行本購入: 25人 クリック: 314回この商品を含む…
Gaucheのマニュアルを見ていたら、Gauche リファレンスマニュアル: SRFI-1 リスト構築子 circular-list elt1 elt2 ... [SRFI-1] 指定した要素をもつ循環リストを構築します。 (circular-list 'z 'q) => (z q z q z q ...) "循環リスト"そ・そんなものがあっ…