[Gauche-devel-jp] バグ報告

Back to archive index

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の添付ファイルを保管しました...
下載 



Gauche-devel-jp メーリングリストの案内
Back to archive index