News for hackers. Stuff that matters.
Re:Wolfram Language by tokipin on Monday November 25, 2013 @08:25PM (#6798438)
if you're asking whether functions in Mathematica are first-class values, then yes. everything in Mathematica is first-class. functions are just symbols that have associated pattern-matching rules in the form f[___], otherwise they are the same as any other symbol.

you can do, for example:

    RandomChoice[{Plus, Times}][2, 3]
where the result will be either 5 or 6. in more explicit form:

    If[RandomReal[] < .5, Plus, Times][2, 3]
example of an "anonymous" function:

    (#1^2 + #2^2 &)[2, 3]
square of all numbers from 1 to 100:

    #^2 & /@ Range[100]
simpler form:

    Range[100]^2
all pairwise products of the first seven prime numbers (among themselves):

    Times @@@ Tuples[Prime /@ Range[7], 2]
etc.
Re:Wolfram Language by lispm on Wednesday November 27, 2013 @01:10PM (#6809916)
I'm asking if first class functions also can be closures. Does it use lexical binding?
Re:Wolfram Language by tokipin on Wednesday November 27, 2013 @08:12PM (#6812453)
i think i answered that question already, which is yes, but technically no. here is a rough Javascript version of the original example:

    makeObj[] := Module[{obj, i = 0},
     obj["inc"] := ++i;
     obj["dec"] := --i;
     obj[] := i;
     obj];


    makeObj = function() {
        var i = 0;
        
        var obj = function(in) {
            switch(in) {
                case "inc" : return ++i;
                case "dec" : return --i;
                case undefined: return i;
            };
        };

        return obj;
    };