Gauche > Archives > 2013/05/22

2013/05/22 08:34:59 UTCyamasushi
#
<record-meta>を継承しながら、生成するのは<record>でないというのが、許されるなら、 https://gist.github.com/yamasushi/5626100 のようなことでもよいのであろうかと思いました。
#
(define-tuple hoge [] (mutable x) (immutable y) )
(define-tuple bar  [hoge] )
(define-tuple foo  [hoge] (mutable a) (immutable b) )

(define p1 (tuple hoge 1 2 ) )
(define p2 (tuple hoge 1 2 ) )
(define q (tuple bar 1 2) )
(define r (tuple foo 1 2 3 4) )

#?=(equal? p1 p2)
#?=(equal? p1 q)
#?=(equal? p1 r)

↓
#?="/home/shuji/gauche/record-relation.scm":69:(equal? p1 p2)
#?-    #t
#?="/home/shuji/gauche/record-relation.scm":70:(equal? p1 q)
#?-    #f
#?="/home/shuji/gauche/record-relation.scm":71:(equal? p1 r)
#?-    #f
2013/05/22 13:14:54 UTCshiro
#
おお、それはクレバーだ。tupleという名前はともかく (tupleとだけ聞くとフィールドは名前より順序で区別されるものって気がしてしまうので。この実装では順序も一応関係あるのでtupleと言えなくもないかなとは思うんですが…)
2013/05/22 16:32:18 UTCkaki
#
継承関係を手軽に追加する方法があれば,こういう時にフィールド比較クラスを作って自分で定義したレコードクラスに継承させて equal? (若しくは record-equal?)を追加するとかできそうで楽しそうです
2013/05/22 16:37:36 UTCshiro
#
Clojureのderiveみたいに後付けで継承を足せるといいのかな。インフラとしてはクラス再定義のメカニズムが使えるから、それほど難しくないかも。
2013/05/22 21:44:18 UTCyamasushi
#
tupleという名前の件、relationのなかで使うことを考えているのでした。だから名前で区別されるわけです。(名付けはコンテキストに依存するので面倒ですね。)
2013/05/22 21:58:45 UTCshiro
#
はい、そういうコンテクストならいいと思うんですが(現在のrecord実装は順序を強く意識した形になってますし)、一般的なライブラリとしてぽんと出すとしたらちょっと名前の方が広すぎるかなあという印象です。
#
Pythonにはnamed tupleってのがありますね。
2013/05/22 22:46:00 UTCaharisu
#
こんにちは。Windows7 64bit環境のMinGWで最新のGaucheをmakeしている途中に、以下のようなエラーが発生しました。
#
GAUCHE_LOAD_PATH="" GAUCHE_DYNLOAD_PATH="" gosh -l./preload -I../src -I../lib ./
precomp -D LIBGAUCHE_BODY libextra.scm
gosh: WARNING: Error while loading initialization file: cannot find "gauche-init
.scm" in ("" "e:\\Gauche\\share\\gauche-0.9\\site\\lib" "e:\\Gauche\\share\\gauc
he-0.9\\0.9.4_pre3\\lib" "e:\\Gauche\\share\\gauche/site/lib" "e:\\Gauche\\share
\\gauche/0.9/lib")(error).
gosh: "error": unbound variable: gauche.collection
make: *** [libextra.c] Error 1
#
Windows環境だとmake途中に作成したsrc/gosh.exeが現在ディレクトリにあり、優先して実行してしまうため、既存のgoshが実行できずにライブラリのロードでこけているのだと思います。
2013/05/22 23:04:48 UTCaharisu
#
(今まではWindows環境でも普通にmakeが通っていたのですが、、もしかすると僕の設定が悪いのかもしれません。)