gauche

コマンドラインからGaucheの使っている文字コードを調べる

コマンドラインからGaucheの使っている文字コードを調べるには以下を実行 $ gosh -e '(print (gauche-character-encoding))' -e '(exit)' utf-8

(続)Gaucheで「カブらない数字を4桁だすの」をやる

引数のリストと同じメンバーがいないような数字をランダムで出力するyを使用。 なんかletだらけになるのが気持ち悪い。 >> (let me ((x ())) (define y (lambda (x) (let me ((a x)) (let ((b (random-integer 10))) (if (memq b a) (me a) b))))) (if (> (l…

.gauchercでgoshのプロンプトをカスタマイズする

srfi-1はtakeの関係上いつも使いたいのでいれておく。 あと、irbの:SIMPLEタイプにプロンプトを変える。 (use srfi-1) (read-eval-print-loop #f #f (lambda (result) (print "=> " result "\n")) (lambda () (display ">> ")(flush))) (display "\nbye...\n…

ちょっと遊んでみた。

うーん、自分で書いておいて何をしているのかさっぱりわからん。schemeのzipはなにげにつかいづらい。 gosh> (map (lambda (x) (let ((y (fold string-append "" (map (lambda (z) (if (= (modulo x (car z)) 0) (cadr z) "")) '((5 "Buzz") (3 "Fizz"))))))…

たたみ込み

rubyのinjectとの違いを発見した。というかだからfoldがおぼえられないとわかった。rubyだと irb(main):002:0> ["a","b","c"].inject("s"){|r,i| r+i} => "sabc"schemeだと gosh> (fold string-append "s" '("a" "b" "c")) "cbas" gosh> (fold-right string-…

wikiクローンその2

ルールの拡張が容易になるように作り直してみた。 編集画面が常に表示されるパターン ファイルアクセスを最小にする #!/usr/bin/gosh (use www.cgi) (let* ((cgi (cgi-parse-parameters)) (title (cgi-get-parameter "title" cgi :default "Sandbox")) (cont…

連想配列

連想配列にはassocを使う。 gosh> (assoc "b" '(("a" 1) ("b" 2))) ("b" 2) gosh> (assoc "c" '(("a" 1) ("b" 2))) #f gosh> (cadr (or (assoc "b" '(("a" 1) ("b" 2))) '("" ""))) 2 gosh> (cadr (or (assoc "c" '(("a" 1) ("b" 2))) '("" ""))) ""cadrでエ…

cgiを書いてみた。

inputに値を入れて返すだけのcgi 一応日本語も通る。 #' ,のコンビでヒアドキュメントっぽく扱ってるが"の扱いが面倒だな。 #!/usr/bin/gosh (use www.cgi) (define cgi (cgi-parse-parameters)) (display #`"Content-type: text/html; charset=UTF-8 <h2>form t</h2>…

wikiクローン書いてみた

いろいろと問題があるが取りあえず書いてみた。 #!/usr/bin/gosh (use www.cgi) (define cgi (cgi-parse-parameters)) (define title (cgi-get-parameter "title" cgi :default "Sandbox")) (let ((data (cgi-get-parameter "data" cgi :default ""))) (if (…

wikiを書いてみた。

始めた書いたlispのアプリケーション。 それにしてはlispにみえない。苦労したのはファイル周り。読み込み (define contents (call-with-input-file #`"wiki/,title" (lambda (x) (if x (port->string x) "")) :if-does-not-exist #f))書き出し (with-output…

その2

少し短くなった。 $ gosh -e '(for-each (lambda (x) (display (call-with-input-file x port->string))) *argv*)' a.txt b.txt foo bar buzz foo2 bar2 buzz2

各コマンドの-eオプションをそろえる

.bashrcに以下を書く function gosh(){ if [ $# -ge 1 ] && [ $1 == '-e' ]; then echo "$2">$$.scm;shift 2;`which gosh` $$.scm "$@";rm $$.scm; else rlwrap `which gosh` "$@";fi } function runghc(){ if [ $# -ge 1 ] && [ $1 == '-e' ]; then echo "$…

gaucheの-eオプションをその辺のLLと同じにする。

仕様:-eオプションは最初に置いたときのみ有効利用方法:以下を.bashrcに叩き込む。 function goshi { if [ $# -ge 1 ] && [ $1 == '-e' ]; then echo $2>$$.scm;shift;shift;gosh $$.scm $*;rm $$.scm;else rlwrap gosh $*;fi; }function書いたの初めてで…

前提 $echo -e "foo\nbar\nbuzz" > a.txt $echo -e "buzz\nbar\nfoo" > b.txtうーん、-Eexit dummyがむかつく(笑 早く慣れよう。とおもったがbashの方で対応した $ goshi -e '(for-each (lambda (x) (display (call-with-input-file x (lambda (f) (port->s…

その2

string-joinはnilのとき""を返すのを発見。 gosh> (string-join ()) ""修整後。すっきりしたなあ。 #!/usr/bin/gosh (define (main args) (display (string-append (string-join (cdr args)) "\n")) 0) listをappendしてからstringに変換する方法 #!/usr/bin…

echoコマンドを作ってみた。 #!/usr/bin/gosh (define (main args) (display (string-append (if (null? (cdr args)) "" (string-join (cdr args))) "\n")) 0) 実行 $ ./echo.scm $ ./echo.scm aaa aaa $ ./echo.scm "aaa bbb" aaa bbb $ ./echo.scm "aaa bb…

コマンドライン引数

*argv* が便利そうだったのだが最初の引数を.scmと思ってるみたいだ。-eの扱いがその辺のスクリプトと違う。-e以外ではrubyのARGVと同じ $ gosh -E'print *argv*' -Eexit a b c d (b c d) $ gosh -E'print *argv*' a b c d (b c d) *** ERROR: cannot find f…

ラッパー作ってみた。

rlwrapに感動して、gaucheでcgiを行う為のラッパーを作ってみた。 標準エラー出力を標準出力にマージし、先頭にhtmlヘッダが無いときに付加する。(本当は標準入力と環境変数を出力しようとしたが力尽きた。) とりあえず終了。 それ以前に、schemeでcgi書く…

readline

gaucheコンパイルなしで履歴が使える!! 速く知っていれば…まあいいや。 aptitude install rlwrap使い方 rlwrap goshしかも、入力時に括弧の対応までとってくれる。なんて便利なんだ。問題点: (car '(1 2))の時に括弧の対応が崩れる。

(続) FizzBuzz をgaucheで解く

大層なタイトルのわりには 大したことないんだが昨日の関数定義をlambdaにしただけ。 defineがなくなって大域変数がなくなったのだが局所変数(仮引数?)使いまくっているあたりが素人。 (use srfi-1) (for-each (lambda (i) (print ((lambda (a b) (if (st…

FizzBuzz解いてみた。

もちろんマニュアルとつきっきり。 何気に楽しかった。 fをdefineしているあたり負け犬。 (use srfi-1) (define (f a b) (if (string=? "" a) b a)) (for-each (lambda (i) (print (f (string-append (if (= (remainder i 3) 0) "Fizz" "") (if (= (remainde…

参考URL

http://www.kahua.org/cgi-bin/khead.fcgi/kahua-web/show/Enjoy%20Gauche http://www.uri.sakura.ne.jp/~cosmic/yuno/lab/scheme/doc/primer/primer.html

マニュアル

http://www.shiro.dreamhost.com/scheme/gauche/man/gauche-refj.html#Top

インタプリタ

$ gosh gosh> (display "Hello,World") Hello,World#<undef> gosh></undef>

インストール

apt-get install gauche