On Tue, Oct 9, 2012 at 10:33 AM, Tassilo Horn <t...@gnu.org> wrote:
> Larry Travis <tra...@cs.wisc.edu> writes:
>
>> and the definition of _list*_ seems to me to be complete without it.
>
> No.  It makes
>
>   (list* 1 2 3 4 5 [6 7] [8 9]) => (1 2 3 4 5 [6 7] 8 9)
>
> else it would result in (1 2 3 4 5 [6 7] [8 9]), i.e., it implements the
> special meaning of list*'s last parameter.

I took Larry's comment to mean that one could implement list* without
spread, which is true; you just need to change (spread more) to (apply
list* more). In fact apply is defined just below list* and makes use
of both spread and list*, but that's ok:

user> (declare list+)
#'user/list+
user> (defn apply+
  ([^clojure.lang.IFn f args]
     (. f (applyTo (seq args))))
  ([^clojure.lang.IFn f x args]
     (. f (applyTo (list+ x args))))
  ([^clojure.lang.IFn f x y args]
     (. f (applyTo (list+ x y args))))
  ([^clojure.lang.IFn f x y z args]
     (. f (applyTo (list+ x y z args))))
  ([^clojure.lang.IFn f a b c d & args]
     (. f (applyTo (cons a (cons b (cons c (cons d (apply+ list+ args)))))))))
#'user/apply+
user> (defn list+
  ([args] (seq args))
  ([a args] (cons a args))
  ([a b args] (cons a (cons b args)))
  ([a b c args] (cons a (cons b (cons c args))))
  ([a b c d & more]
     (cons a (cons b (cons c (cons d (apply+ list+ more)))))))
#'user/list+
user> (list+ 1 2 3 4 5 [6 7] [8 9])
(1 2 3 4 5 [6 7] 8 9)

list+ is slower than list*, though.

-- 
Ben Wolfson
"Human kind has used its intelligence to vary the flavour of drinks,
which may be sweet, aromatic, fermented or spirit-based. ... Family
and social life also offer numerous other occasions to consume drinks
for pleasure." [Larousse, "Drink" entry]

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to