This is the mail archive of the
kawa@sources.redhat.com
mailing list for the Kawa project.
definition of a vector-append function is rejected
- From: Sven Hartrumpf <Sven dot Hartrumpf at FernUni-Hagen dot de>
- To: kawa at sources dot redhat dot com
- Date: Sun, 01 Jun 2003 15:17:07 +0200 (CEST)
- Subject: 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)))))