scheme

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をパラパラと見ていく。どこまでやったっけ、、、とか考えてみるんだけど、本当に放電してる…

load of let/car

詳細はまだ手を付けれてないんだけど、let-optionals* 外しても大して変わらなかったので、リスト操作がdominantっぽい。間接参照1個+1個ぶんのリンクポインタ設定か。

末尾呼出と可変長引数とlet-optionals*

ふと思ったんだけど、階乗とかで末尾再帰をさせようと (define (fact n) (define (loop n v) (if (<= n 1) v (loop (- n 1) (* v n)))) (loop n 1)) のよーに内部関数作っていたのって可変長引数使えば (define (fact n . opt) (let-optionals* opt ((v 1)) …

load, require, import, use

この辺り、いい加減に覚えていて、違いがわかってなかったんだけど。 load 単純ロード require 二重ロード防止。 import モジュール内のexportしているものを名前空間にマップ use require + import を行う。ファイル名=モジュール名である必要あり という…

dive中

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

htmlに変換

いまごろなんだけど吉田 裕美さんの記事を見てて、 http://www.thinkit.co.jp/article/74/2/2.html (html (head (title "Gauche Web")) (body (h1 "Gauche Web Page") (table (tr (td "1") (td "lisp")) (tr (td "2") (td "scheme")))))) こんなS式をhtmlに…

一年前・・・

高々一年前のことが思い出せないってのも情けない。 (define (least-square-pack dat) ;; sum x^2 (let ((sx2 (accumulate (lambda (x y) (+ (square x) y)) 0 (map car dat))) ;; sum x (sx (accumulate + 0 (map car dat))) ;; sum xy (sxy (accumulate + …

Gaucheリハビリ

さて結局お子様に全てをささげることとなった昨日。。。。。。なーんもできなかぁったよぉおお*1。 今日はお仕事がんばるぞ、と思ったら、まだ設計データの権利問題でゴタゴタしてるらしい。こればかりは僕の頭の上の戦いなので手の出しようが無い。仕方ない…

Representing Queues (pp.261-265)

キューを作ります。Θ(1)にするためにデータをためるリスト本体と、その前端(front-ptr)と後端(rear-ptr)を保持するpairがデータ構造になります。 が、しかしここでの実装は 空っぽの場合、というのを front-ptr が nilを指してる場合、としています。空の状…

Y-combinator を理解

再帰を無名関数で行う法。 要するに引数の一つに自分への参照にしちゃう訳ですね。最小二乗法の検算にlisp使ってて、リストの長さを出す関数をふとワンライナー的に書きたくなって理解してしまった・・・(間抜けな動機。length使えば良いじゃんねえ・・・) …

Mutation is just assignment (pp.260-261)

mutation版のconsをprocedureとして再定義。 assignment というかset! があれば理論的にはmutable-data-objectが作れることを見せてます(当たり前な気が・・・いまいち理解できてないみたい)。