読者です 読者をやめる 読者になる 読者になる

glutで画像を表示したぞ。

ppm形式(raw)の画像を用意して、それをglutで表示する。 座標とかはやってない。 高さx幅xRGBのサイズのarrayを用意して、画像を読み込み、glDrawPixelsを実行するだけ。 コンパイル方法。(オプションが多いね。) gcc a.c -lglut -lGL コード #include<GL/glut.h> #incl</gl/glut.h>…

syntax-rulesの同じ深さの<ellipsis>

同じ深さので、違う場所で宣言された場合どうなるのか確認した。 多くの処理系では、短いほうが優先される。 (define-syntax foo (syntax-rules () ((_ ((a ...) ...) (( b ... ) ... )) (quote ( ((a b) ...) ... ))))) (display (foo ((a b)(c d e)) ((A B…

Schemeでライブラリを定義するぞ

Schemeのr7rsにはライブラリを定義する構文がある。 例↓ (define-library (niyarin test) (import (scheme base)) (export foo1 foo2) (begin (define (foo1 a) (+ a 1 )) (define (foo2 a) (- a 1)))) Schemeのライブラリ名は、ライブラリを一意に判別する…

dynamic-wind。

dynamic-windについてまとめた。 dynamic-windのつかいかた (dynamic-wind before thunk after) 引数はすべてthunk(引数0の手続き)。 before、thunk、afterの順に実行する。 ただし、真ん中のthunkで継続を取り出して外側から呼び出した場合や中から外側の継…

raiseとraise-continuableとwith-exception-handler。

Scheme(R7RS)の例外の発生とハンドラについてまとめた。 with-exception-handerで例外ハンドラを登録し、raise、raise-continuableで例外を発生させる。 raiseとraise-continuableの違いは、handlerを呼び出した後での処理に違いがある。 with-exception-han…

SRFI1 Constructorsを眺めたぞ。

srfi1のリストを生成するやつら。 以下は、てきとーにドキュメント眺めてまとめたもの。 cons,list,make-list,list-copyらはr7rsに含まれているので無視する。 xcons 第二引数をcar部に、第一引数をcdr部にconsセルを生成する。 例 (xcons 1 2) ;(2 . 1) con…

Whitespaceを使ったぞ。

Whitespaceは、esolangの一つで、[space]、[tab]、改行だけでスタックマシン的な命令を表現する言語。 チュートリアル。 これが割とあっさりしてるので、動作確認用に書いたコードをメモとして貼ることにする。 [space]はS、[tab]はT、改行はLとして表記する…

GraphVizを使ったぞ。

GraphVizは、dot言語でグラフを記述してpdfやpngとかで出力できる。 GraphViz for discrete math studentsというページでdotのサンプルを確認した。 僕の場合、重み付き有向グラフの描画をできれば良いのでこれだけでよかった。 <雑なdotサンプル> digraph {…

雑に型推論するものを書いたぞ。

方程式を導出してそれを解くということをしただけ。 サポートする構文、組み込み関数 構文 ifとfunとlambda(1つ以上の引数関数の糖衣構文として) (if bool a a) (fun x body) (lambda (x1 x2 ... ) body) 組み込み関数 succ + zero? の3つだけ。 例 関数適用…

gentooの/etc/portage/distfilesをきれいにするぞ

ecleanを使う。 標準では入っていないので、gentoolkitを入れる必要がある。 dオプションをつけると、現在のバージョン以外が消える。(man曰く、only keep the minimum for a reinstallation) 日付やサイズ等のオプションもつけられるが、再ダウンロードすれ…

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)) (make-parameter);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つで、それぞれ(アキュムレータ(返り値とか次のコード…

lispの自作VMへのコンパイラ。

この記事はKobeUniv Advent Calendar 2015の20日めの記事です。 今回は、僕が書いているlisp処理系をどう実装したかについて書こうと思います。 完成が間に合わなかったので、できたら後日公開します。 実装したこと、してないこと 搭載機能 vm(スタックマシ…