Scheme

Guile では call-with-input-file の proc 内でエラーが起きるとポートが閉じられない件

問題 あんまり問題とは言えないかもしれないが、 (proc port) 内でエラーが起きた場合、ポートを閉じる手続きが呼ばれない。 助けてドラえもん!! とはいえ、プログラムが終了する時に全てのポートは自動的に閉じられるとかどこかに書いてあった気がするの…

わんおぶ!

こんな風に書くのめんどいよね。 (or (equal? x #\a) (equal? x #\b) (equal? x #\c)) just を書いて…… (define* (just x #:optional (judge? equal?)) (lambda (other) (judge? x other))) one-of をこういう風に書いたら、 (define (one-of . args) (lambd…

Wercker で Scheme なモジュールのテストした

全国七千万の自動テストファンのみなさんこんばんは! 昨日ね、wercker でテストしたのでそんな感じのことを書くよ。 wercker.yml はこんな感じ: # This references a standard debian container from the # Docker Hub https://registry.hub.docker.com/_/d…

モジュールのこと

Scheme の S6RS や S7RS では モジュールの名前を (shell command) みたいにリストで表記する。 私が使っている Guile ではそういう風に表記するので、調べてみたら R6RS や R7RS のあれだった。 R6RS でも R7RS でもモジュールじゃなくてライブラリというら…

gasket のこと

デバッグプリントのことは置いておいて、Guile のモジュールマネージャー、gasket のご紹介。 ぐにゅーのパッケージマネージャー GuixSD も Guile で書かれてるみたい*1なんだけど、モナドとか実装して使っててよくわからなかったから、 Panda っていう Perl…

guile とかで Cradle っていうビルドツール書きたい感ある

Gradle 見てるとビルドツール書きたくなるよね! で、考えたのがこーいう書き方: (task greeting () (println "Hello, World!")) (task count () (map (lambda (it) (print it " ")) (iota 4))) (task intro (#:depends-on greeting) (println "I'm Cradle."…

Ricty のビックリマークが見づらい…

Scheme でこーいうコードを書いていて、ビックリマークの下の点が無くなっていることに気がついた。 #!/usr/bin/csi -ss (use srfi-9) (define-record-type <argument-parser> (argument-parser. program-name version) argument-parser? (program-name program-name set-prog</argument-parser>…

easyffi を使ってみたんだけど、なにがなんだかわからない

Vala のサンプルを見て書いてみた: (require-extension easyffi) (foreign-parse/declare "#include <gtk/gtk.h>") (define-external (_gtk_main_quit_gtk_widget_destroy ((pointer "GtkWidget") _sender) (c-pointer data)) void (gtk_main_quit)) (define-external (</gtk/gtk.h>…

println なマクロ書いた

処理系によって print が改行しなかったり無かったりするのがムカついたので書いた。 (define-syntax println (syntax-rules () ((_) (begin (newline))) ((_ a b ...) (begin (display a) (println b ...))))) 使い方はこんな感じ: (println "foo") (printl…

Chicken Scheme のコマンドの使い方

Chicken Scheme には csc というコンパイラと csi というインタプリタ的なそれがあります。 中でも csi はコンパイルしないで実行できるのでとっても重宝します(質の悪い前フリ)。 Scheme では main 関数を呼ぶ必要はなかったりするので、トップレベルに書け…

chicken つこおてみた

Sphinx-1.2.2/sphinx の application.py の中から _init_builder の上 3 行だけ書いてみた: (define (init-builder self builder-name) (when (null? builder-name) (print "No builder selected, using default: html") (set! builder-name "html")) `(,sel…

apply すごい!

全然 apply のこと知らなかったので、apply のことを書いておく。 例えば、values に make-list で作ったリストというか、リストの要素を渡したいとする。 リストを渡すと values はリストのまま多値にして返すのでちょいと困る。 しかし、apply を使えば: (…

help-formatter#add-argument! についてなにか書いてみる

比較的よく書けたな〜って思う help-formatter-add-argument! について書いてみる。 (define-method help-formatter-add-argument! ((self <help-formatter>) (action <argument-action>)) (unless (equal? (help-of action) +suppress+) (let* ((get-invocation# (ref self format-action-inv</argument-action></help-formatter>…

Scheme で永遠にへろーわーるどするコード書いてみた

(define (not-dreadful-infinite-loop) (define (loop) (display "Hello, World!") (newline) (loop)) (loop)) (not-dreadful-infinite-loop)