Jun Mukai
mukai****@jmuk*****
2010年 8月 21日 (土) 23:30:47 JST
srfi-43で定義されるvector-mapは、 http://srfi.schemers.org/srfi-43/srfi-43.html#vector-map こちらのとおりで、関数は何番目の要素かという引数iを受け取ると定められています。 したがって対象的でない挙動であることは想定されているのではないでしょうか。 -- Jun Mukai 2010/8/21 岩永亮 <ryoiw****@gmail*****> > 初めてのメールです。 > 岩永と申します。 > どうぞよろしくお願いします。 > > srfi-43のvector-mapを使用したのですが、map関数と対照的でない値が返ってしまいます。 > > --- 以下はテスト用のcode --- > > ;;;; TEST-vector-map.scm > (use srfi-43) ; vector-map > > (define v1 (vector 1 2 3)) > (define v2 (vector 4 5 6)) > (define v3 (vector 7 8 9)) > > (print "--- CASE: no args ---") > (print (vector-map + v1)) > (print (vector-map - v1)) > (print (vector-map * v1)) > (print (vector-map / v1)) > (print "--- CASE: with args ---") > (print (vector-map + v1 v2 v3)) > (print (vector-map - v1 v2 v3)) > (print (vector-map * v1 v2 v3)) > (print (vector-map / v1 v2 v3)) > > > >>--- CASE: no args --- > >#(1 3 5) > >#(-1 -1 -1) > >#(0 2 6) > >#(0 1/2 2/3) > >--- CASE: with args --- > >#(12 16 20) > >#(-12 -14 -16) > >#(0 80 324) > >#(0 1/80 1/81) > > > > Gauche-0.9/ext/srfi-43.scmの%vector-map1!関数と%vector-map2+!関数を下記の様に書き換えたところ改善しました。(コメントアウトは変更前です。) > > (define %vector-map1! > (letrec ((loop (lambda (f target vec i) > (if (zero? i) > target > (let ((j (- i 1))) > (vector-set! target j > (f (vector-ref vec j))) ;; (f j > (vector-ref vec j))) > (loop f target vec j)))))) > (lambda (f target vec len) > (loop f target vec len)))) > > (define %vector-map2+! > (letrec ((loop (lambda (f target vectors i) > (if (zero? i) > target > (let ((j (- i 1))) > (vector-set! target j > (apply f (vectors-ref vectors j))) ;; (apply f > j (vectors-ref vectors j))) > (loop f target vectors j)))))) > (lambda (f target vectors len) > (loop f target vectors len)))) > > > ------------------------------------------------------------------------------------ > 岩永亮 > > > _______________________________________________ > Gauche-devel-jp mailing list > Gauch****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/gauche-devel-jp > -------------- next part -------------- HTMLの添付ファイルを保管しました... 下載