Discussion:
Using APPLY with functions with #!key arguments
Duncan Mak
2017-12-28 01:28:49 UTC
Permalink
I think this used to work in older Kawa releases, but how do I use
APPLY to invoke a function like this in Kawa 3.0?

#|kawa:1|# (define (foo x #!key y) (list x y))

#|kawa:2|# (foo 1 y: 2)
(1 2)

#|kawa:3|# (apply foo (list 1))
(1 #f)

#|kawa:4|# (apply foo (list 1 2))
gnu.mapping.WrongArguments

#|kawa:5|# (apply foo (list 1 y: 2))
gnu.mapping.WrongArguments

In Kawa 2.4, this worked:

***@furigana:~/Downloads/kawa-2.4/bin$ ./kawa
#|kawa:1|# (define (foo x #!key y) (list x y))
#|kawa:2|# (apply foo (list 1 y: 2))
(1 2)
#|kawa:3|# (apply foo (list 1 2))
(1 #f)


Happy holidays!
--
Duncan.
Per Bothner
2017-12-28 02:48:58 UTC
Permalink
Post by Duncan Mak
I think this used to work in older Kawa releases, but how do I use
APPLY to invoke a function like this in Kawa 3.0?
#|kawa:1|# (define (foo x #!key y) (list x y))
You can do this:

(apply foo (arglist 1 y: 2))

which is the same as:

(foo @:(arglist 1 y: 2))

This chapter in the manual should be helpful:
https://www.gnu.org/software/kawa/Application-and-Arguments-Lists.html
--
--Per Bothner
***@bothner.com http://per.bothner.com/
Duncan Mak
2017-12-28 03:56:54 UTC
Permalink
Thanks Per! That worked!
Post by Per Bothner
Post by Duncan Mak
I think this used to work in older Kawa releases, but how do I use
APPLY to invoke a function like this in Kawa 3.0?
#|kawa:1|# (define (foo x #!key y) (list x y))
(apply foo (arglist 1 y: 2))
https://www.gnu.org/software/kawa/Application-and-Arguments-Lists.html
--
--Per Bothner
--
Duncan.
Loading...