Jess's "apply" differs from the classic Lisp "apply" in that the varargs are in the "apply" funcall, rather than being bundled up in a list. This is by accident rather than by design, I'm afraid. In classic Lisp, this form
(apply str-cat "foo" " bar" " baz") is an error, but in Jess, it's correct. In classic Lisp, you'd have to say something like (apply 'str-cat (list "foo" " bar" " baz")). to get the same effect. I think Steve Solomon wrote: > Jess> (apply str-cat "foo" " bar" " baz") > "foo bar baz" Here there are three arguments to str-cat; each is converted into a String, the strings concatenated, and the result is returned as a String. > > Jess> (deffunction test ($?args) (apply str-cat ?args)) > Jess> (test "foo" " bar" " baz") > "\"foo\" \" bar\" \" baz\"" Here, on the other hand, there is just one, the list in ?args. That list is converted to a String, and that String is returned. > To concatenate strings inside a function currently I use a foreach loop: > (bind ?res "") > (foreach ?str ?args (bind ?res (str-cat ?res ?str))) > where ?args is the multifield parameter of the function as above. Here's an (untested, but probably works) "apply*" function which acts like classic Lisp "apply". Feel free to use it: import jess.*; public class ApplyStar implements Userfunction, Serializable { public String getName() { return "apply*"; } public Value call(ValueVector vv, Context c) { Funcall f = new Funcall(vv.get(1).stringValue(c), c.getEngine()); ValueVector args = vv.get(2).listValue(c); for (int i = 0; i < args.size(); i++) f.arg(args.get(i)); return f.execute(c); } } --------------------------------------------------------- Ernest Friedman-Hill Advanced Software Research Phone: (925) 294-2154 Sandia National Labs FAX: (925) 294-2234 PO Box 969, MS 9012 [EMAIL PROTECTED] Livermore, CA 94550 http://herzberg.ca.sandia.gov -------------------------------------------------------------------- To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]' in the BODY of a message to [EMAIL PROTECTED], NOT to the list (use your own address!) List problems? Notify [EMAIL PROTECTED] --------------------------------------------------------------------