This is the mail archive of the kawa@sources.redhat.com mailing list for the Kawa project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

definition of a vector-append function is rejected


Hi all.

If I load the file below, I get the following error:

> kawa
#|kawa:1|# (load "kawabug5.scm")
gnu.mapping.UnboundSymbol: Unbound symbol vector-append - no field vector$Mnappend in kawa.standard.vector_append
        at gnu.kawa.reflect.ClassMemberConstraint.setup(ClassMemberConstraint.java:68)
        at gnu.kawa.reflect.ClassMemberConstraint.set(ClassMemberConstraint.java:90)
        at gnu.mapping.Symbol.set(Symbol.java:106)
        at atInteractiveLevel.apply(Unknown Source)
        at gnu.mapping.CallContext.runUntilDone(CallContext.java:258)
        at gnu.expr.ModuleExp.evalModule(ModuleExp.java:188)
        at kawa.Shell.run(Shell.java:232)
        at kawa.standard.load.loadSource(load.java:162)
        at kawa.standard.load.loadSource(load.java:131)
        at kawa.standard.load.apply(load.java:233)
        at kawa.standard.load.apply2(load.java:201)
        at kawa.standard.load.apply1(load.java:191)
        at gnu.mapping.Procedure1.applyN(Procedure1.java:49)
        at gnu.mapping.Procedure.apply(Procedure.java:102)
        at gnu.mapping.CallContext.runUntilDone(CallContext.java:258)
        at gnu.expr.ModuleExp.evalModule(ModuleExp.java:188)
        at kawa.Shell.run(Shell.java:232)
        at kawa.Shell.run(Shell.java:180)
        at kawa.Shell.run(Shell.java:167)
        at kawa.Shell.run(Shell.java:154)
        at kawa.repl.main(repl.java:609)
#|kawa:2|# 


It looks as if one cannot redefine vector-append.
1. Is this intended?
2. If so, should I use
   (cond-expand ((not kawa) ...
   around my function definition(s)?
   (My programs have to run under many different Scheme systems.)

Greetings
Sven

; kawabug5.scm

;\begin{so}{vector-append}{v1 v2}
; a new vector which contains all elements from vector v1 and v2 in that order
;\end{so}

(define vector-append (lambda (v1 v2)
  (let* ((n1 (vector-length v1))
         (n2 (vector-length v2))
         (v3 (make-vector (+ n1 n2))))
    ;(debug 3 "vector-append: n1: " n1 " n2: " n2)
    (vector-copy-n v1 0 v3 0 n1)
    (vector-copy-n v2 0 v3 n1 n2)
    v3)))
        

;\begin{so}{vector-copy-n}{v1 pos v2 pos2 n}
; undefined
;\end{so}
; Side effect: copies n values from vector v1 to vector v2 starting at offset pos1 and pos2, resp.

(define vector-copy-n (lambda (v1 pos1 v2 pos2 n)
  (do ()
      ((<= n 0))
    (vector-set! v2 pos2 (vector-ref v1 pos1))
    (set! pos1 (+ pos1 1))
    (set! pos2 (+ pos2 1))
    (set! n (- n 1)))))


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]