yaotti's diary

QiitaやKobito、Qiita:Teamを作っています。Software is Eating the World

Gaucheで今日理解したこと

ちょっとしかしてないけど。

モジュールニツイテ

(use gauche.interactive)
(apropos 'module)

てやるとわかるんだけど、

  • (all-modules)
  • (current-module)

なんていう関数がある。


それぞれ、

  • 現在存在するすべての名前つきモジュールのリスト
  • コンパイル時のカレントモジュール

を返す。
後者は特殊形式らしい。うーむどういうことだ。
コンパイル時まで評価されないてことかな。



なぜモジュールについて調べたかというと、

(set! define 1)


てやったあとにどうやって元のdefineに戻すのかわからない。

(set! define (with-module gauche define))

などとしてもだめ。
現在調査中。



定数


gaucheで最初から束縛されてるグローバル定数てあんのかな」
とついったーで投げたら、
suztomo「define.」
naoya_t「*program-name*とか?」
などと返ってきた。


前者は盲点、というかわからなかった自分が情けない。
「定数の値=数値or文字列」という思考だった。
「関数も変数も一緒」というのはschemeの特徴なのに。だめですね:p


後者は知らなかった。

gosh>*program-name*
"/usr/local/bin/gosh"
gosh>*load-path*
("/usr/local/share/gauche/site/lib" "/usr/local/share/gauche/0.8.13/lib") 


ほかにもありそうだ。
一覧で出してくれる手続きてのはなさげ。



そのた


パターンマッチ&正規表現がおもしろそう。
これマクロと組合せたらすごいことになるな。
それができてやっとscheme(gauche)の真髄をちょこっと理解できそうだ。
とりあえず理解して逆ポーランドをmatchを使って書き変える。