(wat-aro)

無職から有職者にランクアップしました

gauche

OSXにGaucheのHEADをインストール

GaucheのHEADをインストールするにはリリースされた最新のGaucheが必要です. ここにはまりました. なぜか最新版の0.9.4でもビルドできなかったのでbrewでインストールしてから後で消しています. make install の後にbrew uninstall gaucheをすると必要なu…

Scheme修行のtryについて

Scheme修行作者: Daniel P. Friedman and Matthias Felleisen,元吉文男,横山晶一出版社/メーカー: オーム社発売日: 2011/06/15メディア: 単行本(ソフトカバー)購入: 3人 クリック: 46回この商品を含むブログ (10件) を見る p89の欄外で補足されているtryに…

SICP 4.4.4 extend-if-consistentのエラー

4.4.4の論理型プログラミングの実装を評価すると以下のエラーが出ます. gosh> *** ERROR: Compile Error: cannot find "var" in ("/usr/local/Cellar/gauche/0.9.4/share/gauche-0.9/site/lib" "/usr/local/Cellar/gauche/0.9.4/share/gauche-0.9/0.9.4/lib…

OS X Yosemiteにswank-gaucheのインストール

きっかけはTwitter. @wat_aro どの処理系使ってるかわからないですがgaucheのswank-gaucheみたいに対応されてたりしませんか?— lispドラッグ常習者 (@rayfill) 2016, 1月 12 早速インストール. READMEに 設定方法 `dot.emacs'の内容を.emacsにコピーしてs…

特殊形式は高階手続きと一緒に使うことができない

手続きは引数を全て評価してoperatorに渡す. 特殊形式は引数を全て評価するとは限らない. ここではdefineについて見てみる. defineは第1引数は評価せず,第2引数を評価した値を第1引数に束縛する. (define x (+ 1 2)) (+ 1 2) 3 (define x 3) x 3 次…

gauche-modeでシングルクオートを補完されないようにする

smartparens-modeをアップデートしたらgauche-modeでシングルクオート'が補完されて''になってしまいました. 以前はsmartparens.elの該当箇所, (defcustom sp-lisp-modes '(cider-repl-mode clojure-mode clojurec-mode clojurescript-mode clojurex-mode …

SICP 3.4.2 parallel-executeの実装

これ以降やるための準備です. gauche.threadsの使い方がわからなかったのでリファレンス見ながらググって見つけたコードを理解しました. (use gauche.threads) (define (delay time proc) (lambda () (thread-sleep! time) (proc))) (define (delay-print …

Gaucheの組み込み手続きの戻し方

何回も忘れてその都度ググったりプログライングGauche見るのでダメですね. ここに書いておきます. (define func-name (with-module gauche func-name))

プログラミングGauche読了

ちょっと時間かかったけどプログラミングGauche読み終わりました. Scheme手習い程度の知識しかなかったので,Gaucheには便利な機能がたくさんあるなと思いました. 特に#?=でdebug-printが呼び出せるのはいいですね. 継続,マクロは難しかったです. パタ…

プログラミングGauche 19.7 簡易な例外機構のまとめ

マクロとcall/ccを使ったcatchとthrowの実装の解説を備忘録として残します. ;; 簡易例外機構 (define *signals* '()) (define-syntax catch (syntax-rules (finally) [(_ (sig body ...) (finally follow ...)) (let* ((signals-backup *signals*) (val (ca…

プログラミングGauche 17.5.3練習問題

<logger-generic>のログ出力のon/offを切り替えられるようにする. <logger-generic>クラスにprintingスロットを追加してその真偽で処理を分ければよい. printingスロットの値を後で変えられるようにprinting!メソッドとnot-printing!メソッドも追加した. (define-class <logger-generic> (<generic>) ((printing :ini</generic></logger-generic></logger-generic></logger-generic>…

プログラミングGauche 14.3.2練習問題

call-with-input-stringとcall-with-output-stringを使ってwrite-to-stringとread-drom-stringを実装する. ポートの挙動がよくわかってなかったので苦戦した. こういう時にREPLはありがたい. (define (write-to-string arg) (call-with-output-string (la…

プログラミングGauche 9.1練習問題

delete-1は見つからなかった場合もcond式のelse節でconsしているためにコピーしたリストを返す. 元のリストを返すように実装する. 以下が元のdelete-1 (define (delete-1 elt lis . options) (let-optionals* options ((cmp-fn equal?)) (define (loop lis…

プログラミングGauche 8.3.3練習問題

(define (any-pred . preds) (lambda (x) (fold (lambda (pred false) (or (pred x) false)) #f preds))) (define (every-pred . preds) (lambda (x) (fold (lambda (pred true) (and (pred x) true)) #t preds)))

プログラミングGauche 7.4練習問題

可変長の引数を受け取り,リストにして返す手続きlistを書く. (define list (lambda ls (cond (else ls)))) または (define (list . ls) (cond (else ls))) 実行してみる. (list) () (list 1 2 ) (1 2) (list '(1 2) '(3 4)) ((1 2) (3 4)) 引数をそのまま…

プログラミングGauche 7.2練習問題

for-each-numbersを書く (define for-each-numbers (lambda (proc lis) (for-each proc (filter number? lis)))) map-numbersを書く (define map-number (lambda (proc lis) (map proc (filter number? lis)))) numbers-onlyを書く (define (numbers-only wa…

複数のシステムのEmacs上でgaucheを使う時のinit.elの設定

現在Macbook ProとUbuntuを使っています。 emacs上でgaucheを使おうとする時にmacとubuntuで設定を統一したかったので調べました。 (when (eq system-type 'system-type) (setq ...)) とすれば良いようです。 system-typeですが、l…