This is specific to cljs, jvm clojure doesn't allow a nil in number ops and
max doesn't allow 0 args.

In general, clojure defers to the host for number operations since those
often need to be fast and overhead-free, so this is showing some
implementation details in the emitted javascript.

I disagree that this is a 'referential transparency' issue when doing it
creates the same result every time.  There's no 'references'.

Upon inspecting, I notice that the emitted code for the apply
cljs.core.apply.call(null,cljs.core.max,cljs.core.PersistentVector.EMPTY)
returns 'undefined', where the emitted code for (max) is a bit different.
 "function (){
return ((1) > (function (){var x__24812__auto__ = null;
var y__24813__auto__ = null;
return ((x__24812__auto__ > y__24813__auto__) ? x__24812__auto__ :
y__24813__auto__);
})());

I think the issue here is that 'max' is implemented as a macro but not when
you use apply:
https://github.com/clojure/clojurescript/blob/r1.9.908-12-g998933f/src/main/clojure/cljs/core.cljc#L1146
https://github.com/clojure/clojurescript/blob/998933f5090254611b46a2b86626fb17cabc994a/src/main/cljs/cljs/core.cljs#L2649

On Wed, Sep 13, 2017 at 1:40 PM <[email protected]> wrote:

> Hi Everyone!
>
> I recently come up against an unexpected behavior in my program written in
> cljs (version 1.7.145)
> and I verified that the same problem happen with lumo.
>
> cljs.user=> (> 1 nil)
> true
> cljs.user=> (apply max [])
> nil
> cljs.user=> (> 1 (apply max []))
> false
>
> This seems to be a problem of Referential Opacity and I think is due to
> the fact that ">" is a macro.
> But I'm not sure... Can someone give me a detailed explanation of the
> reason? :)
>
> Thanks! :)
>
> --
> Note that posts from new members are moderated - please be patient with
> your first post.
> ---
> You received this message because you are subscribed to the Google Groups
> "ClojureScript" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/clojurescript.
>

-- 
Note that posts from new members are moderated - please be patient with your 
first post.
--- 
You received this message because you are subscribed to the Google Groups 
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/clojurescript.

Reply via email to