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

scheme処理系を実装中です。

Kobe University Advent Calendar 2016の22日目の記事です。 そして私はB3のniyarinです。 本編に関係ないネタ 本編が少し雑なので、xmas treeを出力するスクリプトをてきとーにschemeで書きました (define decorate #f) (let ((pos-seed 1) (shape-seed 1))…

syntax-rulesの仕様を読んで確認した

r7rsのsyntax-rulesのパターンの部分の仕様を読んで確認する。(vectorは省く) とる形は、以下の4つ(Pはパターンで、[ellipsis]は、0個以上の繰り返し) 1. (P1 ... Pn ) 2. (P1 ... Pn . Pn+1) 3. (P1 ... Pk Pe [ellipsis] Pm+1 ... Pn) 4. (P1 ... Pk Pe [e…

ウサギとカメ(循環リスト)

連結リストで循環しているかどうか、どこで循環が始まっているのかを検出する。 正式には、Floyd's cycle-finding algorithmと呼ぶらしい。 証明は省くが、だいたい↓のような手順 循環判定 ・セルを2つづつ移動するのをウサギ、1つづつ移動するのをカメとし…

schemeのパラメータオブジェクトの使い方を調べた。

r7rsでは標準。 パラメータオブジェクトは、値を束縛して動的存続期間中にその値を変更できるオブジェクト。 make-parameterで、パラメータオブジェクトを作れる。 (define foo (make-parameter 123)) (foo);123 パラメータオブジェクトに値を渡した時の挙動…

python-mechanizeでログインするぞ。

mechanizeは、スクレイピングとか用のweb操作ライブラリ。 標準ではないのでpip等でinstall。 で、ためしにログイン画面をつくってmechanizeでアクセスする。 ログイン画面はこんなかんじ。 index.html <html> <head> </head> <body> <form name="LOGIN" action="/cgi-bin/form_test.py"> USERNAME <input type="text" name="USERNAME"></input><br> PASSWORD <input type="text" name="PASSWORD">

schemeのdatum label

datum labelを使うとschemeの循環構造を表記できる。 (define x (list 1 2 3 )) (set-cdr! (cddr x) x) ;#0=(1 2 3 . #0#) (define y (list 4 x 6)) (set-cdr! (cddr y) y) ;#0=(4 #1=(1 2 3 . #1#) 6 . #0#) (define z (quote #0=(1 2 . #0#))) ;#0=(1 2 . …

openboxにターミナル起動キーバインドを追加しました。

ctrl+alt+tでターミナルエミュレータを起動するようにする。 ~/.config/openbox/rc.xmlにキーバインド関係の設定がある。 <keybord>内に以下のような感じで書き加える。 こちらの環境では、lilytermを使っている。 <keybind key="C-A-t"> <action name="Execute"> <command>lilyterm</command> </action> </keybind> 修飾キーの略語は、 C:Control A:Alt S</keybord>…

gentooにtint2をいれました。

openboxのお供にする。 インストール ランチャー機能がある0.12以上を入れる。 emerge --ask xdotool emerge --ask "=x11-misc/tint2-0.12.3" コンフィグを修正 ~/.config/tint2/tint2rcを編集する。 初期状態では、そんざいしないアプリケーションへのリン…

schemeのcaseについて

キーと各データをどう比較しているのか気になったので調べた。 r5rsによるとeqv?で比較しているそうだ。(4.2.1) というわけで、 ・symbol、char、symbol、空リストは見た目が同じならよい。 ・数値は、正確数同士か不正確同士で数値的に等しければよい。 ・…

3impの3章を読みました。

3impの3章は、schemeのheap型VMとそのコンパイラの実装について書かれている。 コードを見てだいたい分かったので文のほうはさらっとしか読んでないけど。 ・vm用コードもs式 ・レジスタは、a,x,e,r,sの5つで、それぞれ(アキュムレータ(返り値とか次のコード…