Gauche > Archives > 2013/05/16

2013/05/16 02:31:10 UTCshiro
#
んー、単に忘れてただけかな?
2013/05/16 03:05:16 UTCyamasushi
#
gosh> (use util.sparse)
#<undef>
gosh> (define x (make-sparse-vector 'u8))
x
gosh> (sparse-vector-set! x 0 1)
#<undef>
gosh> (sparse-vector-set! x 1 2)
#<undef>
gosh> (sparse-vector-for-each x print)
01
12
#<undef>
gosh> (for-each print x)
*** ERROR: improper list not allowed: #<<sparse-u8vector> 0x92b8990>
Stack Trace:
_______________________________________
  0  (eval expr env)
        At line 173 of "/usr/local/share/gauche-0.9/0.9.4_pre3/lib/gauche/interactive.scm"
gosh> (is-a? x <collection>)
#t
2013/05/16 03:11:57 UTCyamasushi
#
あ、hash-tableもそうだから、これは問題ではないわけですね。
2013/05/16 03:37:04 UTCyamasushi
#
<hash-table>のものをそのままコピペして,call-with-iteratorをつくってみました。 https://gist.github.com/yamasushi/5589198 問題はcall-with-builderはどうやればいいのかなと考えています。
2013/05/16 04:00:08 UTCyamasushi
#
gosh> (use gauche.collection)
#<undef>
gosh> (with-builder (<u8vector> put! get) (get))
#u8()
gosh> (with-builder (<u8vector> put! get) (put! 1) (get))
*** ERROR: vector required, but got #u8(1)
ユニフォームベクタにもbuilderがないような。
2013/05/16 04:10:40 UTCyamasushi
#
gosh> (use gauche.collection)
#<undef>
gosh> (use gauche.uvector)
#<undef>
gosh> (with-builder (<u8vector> put! get) (put! 1) (get))
*** ERROR: vector required, but got #u8(1)
gauche.uvectorをuseしても同じです。
2013/05/16 05:19:33 UTCyamasushi
#
すみません。xreplのrepl-printがuvectorでエラーになっているだけでした。
2013/05/16 10:54:55 UTCyamasushi
#
gosh>  (define-method object-apply ((o <top>) . arg) (apply values o arg))
#<generic object-apply (15)>
gosh> (1 2 3)
1
2
3
gosh> (.$ 1 2 3)
#<closure (compose compose)>
gosh> ((.$ 1 2 3))
1
2
3
#
また、ちょっと変なことを思いついてしまったのですが、すべて適用可能にして、その結果を多値にするということになるとどうなるだろうかとか・・・・(あまり意味がないような気がするのですが、頭から離れないもので・・・・)
2013/05/16 23:13:20 UTCyamasushi
#
gosh> (use gauche.record)
#<undef>
gosh> (define-record-type (vp (pseudo-rtd <vector>)) #t #t (x) (y) (z))
vp-z-set!
gosh> (vp-x #(1 2 3))
1
gosh> (define-record-type (lp (pseudo-rtd <list>)) #t #t (x) (y) (z))
lp-z-set!
gosh> (lp-x '(1 2 3))
*** ERROR: record-ref: instance of #<class lp> expected, got (1 2 3)
Stack Trace:
_______________________________________
  0  (eval expr env)
        At line 173 of "/usr/local/share/gauche-0.9/0.9.4_pre3/lib/gauche/interactive.scm"
#
pseudo recordに<list>を指定できないのですが、なにか間違えてしまったのでしょうか?
2013/05/16 23:30:47 UTCshiro
#
今見てみたらlistのpseudo-recordの実装が中途半端だった。後で書くつもりで忘れてたようだ。
2013/05/16 23:40:35 UTCyamasushi
#
https://gist.github.com/yamasushi/5595977 こんな感じにしてみました。
#
list-set!があるのに気が付きました。
2013/05/16 23:44:18 UTCshiro
#
ああ思い出した。vector-pseudo-recordとほとんど繰り返しになるんで似たコードをたくさん書くよりもマクロにしようって思ったところで止まってたんだ。どうせuvector-pseudo-recordも必要になるし。