gauche

14. 入出力

嵐(2歳)が去ったので、勉強再開。 高レベルなやつ(S式を読む。lexer込み)と低レベルなやつ(単なるIO)がある。 入力 read S式を読む。 read-line, read-char, read-byte 行や文字を読む。 read-*系をgoshの対話環境からやろうとするとコマンド入力バッファ…

13.6 正規表現

少し空いてしまった。前回は文字列のところ。正規表現から。 リテラル は #/regex/ 。覚えやすい。#/../iでcase-insensitive。ひょっとして gとか使える? と思ったけどダメだった。 正規表現自体は殆どperl5。 マッチング rxmatchを使ってマッチング。けど…

cutの実装

とりあえず明日の仕事というか宿題が終わったので、schemeに戻れる。 まずどっちからやろうかな、と考えて、より大変そうなcutからやってみる。早速 srfi-26を覗いてみる。 と、こんな感じの入り口マクロに (define-syntax cut (syntax-rules () ((cut . slo…

文字列

朝っぱらからパン食べ過ぎ。昼飯の準備もできたし、腹ごなしに目覚めのscheme(?)。というか真横で塊魂を嗜む息子(2歳)。うーん、変な家庭 ・ω・ 文字 #\ かなるほど(そんだけかよ)。 #\spaceとかもつかえるらしい。他に何があるのかな、、とread.cを…

整数とか実数とか正確数とか

http://d.hatena.ne.jp/tkuro/20090604/1244149299#c なるほど。。。 shiro 2009/06/05 12:26 「整数」と「整数型」を混同されてませんか? 3も3.0も「整数」です。3.0は「整数型」では表現されませんが。はい、、完全に混同してました。教えてもらったリンク…

数値

p.155の ・整数(例: 100、3.0)となってるのの3.0って3の間違い? gosh> (class-of 3) #<class <integer>> gosh> (class-of 3.0) #<class <real>> 二進数とか。 gosh> #b101010101010 2730 バイナリアンにはありがたい。 ほかに #o octal #d decimal #x hexdecimal #e exact number #i in</class></class>…

評価モデル

SICPを思い出した。 抽象度の高いモデルで計算を考える。 置き換えモデル 順次プリミティブになるまで、オペランドを置き換えていって、最終的にすべてのオペランドがプリミティブになったところで計算終了。 副作用とかassignとか、基本的に時間概念が入る…

テスト

予定通りgauche.testで遊んでみようかと (test* "hoge" expected test-code &opt cmp-fn) 思ったんだけどまあ当たり前のように当たり前。 メインは例外処理か。 (guard (e ((cond1) v1) ((cond2) v2) ( else default-case)) (body)) 最初 ZERO DIVIDEひっか…

9 集合

member gosh> (define (my-member elm lst . options) (let-optionals* options ((pred equal?)) (cond ((null? lst) #f) ((pred elm (car lst)) lst) (else (my-member elm (cdr lst) pred))))) my-member gosh> (my-member 'ration '(cookie dagger ration…

and-let*

gosh> (define (ccar lst) (if (pair? lst) (car lst) #f)) ccar gosh> (and-let* ((a '(("reach!"))) (b (ccar a)) (c (ccar b)) (d (ccar c))) d) #f gosh> (and-let* ((a '((("reach!")))) (b (ccar a)) (c (ccar b)) (d (ccar c))) d) "reach!" モナドっ…

#

gosh> (if (if (= 1 0) #t) "true" "false") "true" そか、やっぱりundefって#fじゃあ無いのか。

練習問題p101

gosh> (define (my-any-pred . preds) (lambda (x) (any (lambda (p) (p x)) preds))) my-any-pred gosh> (define sym-or-string? (my-any-pred symbol? string?)) sym-or-string? gosh> (sym-or-string? "hoge") #t gosh> (sym-or-string? 10) #f gosh> (sy…

勉強再開

そういえば去年の10月ごろからこちら、全然 lispって無かったので頭から放電される寸前。まさにDynamic脳。リフレッシュしよう。 とりあえずプログラミング Gaucheをパラパラと見ていく。どこまでやったっけ、、、とか考えてみるんだけど、本当に放電してる…

dive中

ようやく時間が取れたので、Gauche-0.8.14にダイブしてみる。vminsn.cがscmファイルから生成されることに感動していじろうとして、システムに入ってたのが古いgoshだったために define-reader-directive とかなくて、しょうも無いところで時間を食う。が、い…

pa$

pa$ ってなにー? と思ったら部分摘要なのか。 (cut list 'quote <>) や (lambda (x) (list 'quote x)) でも良いのね。。。勉強になるけどややこし。ちなみに、僕自身でも頑張って考えてみたんだけど、結局 lambdaでクォートしよう! というアイディアは出た…

apply

applyのところを読んでいて、「あれ? じゃあlambdaと引数リストをくっつけたもの作って evalしても等価?」と思ってしまい (define (append/log* . args) (print "args=" args) (eval #?=(cons 'append args) (null-environment 5))) とかしてしまう. gosh>…

let*

我ながら不勉強だなあと思うんだけど今までlet*を魔法だと思ってた。 gosh> (let* ((x 2) (y (* x 2))) (* y 2)) 8 gosh> ((lambda (x) ((lambda (y) (* y 2)) (* x 2))) 2) 8 こういうことだったのね。 今日の教訓 lispの世界に魔法はない。