Code Monkey home page Code Monkey logo

Comments (3)

nighthawk avatar nighthawk commented on July 30, 2024

According to the README there's no way to specify operator precedence:

Operator precedence follows standard BODMAS order, with multiplication/division given precedence over addition/subtraction. Prefix operators take precedence over postfix operators, which take precedence over infix ones. There is currently no way to specify precedence for custom operators - they all have equal priority to addition/subtraction.

My understanding is that if you use that input/pure constructor and return nil, it should fallback to the built-in operators. Do you have an example where your code doesn't work as expected?

(Note that it should be fine to define your ^ operator as a pure symbol, as what it returns is always the same for the same input arguments.)

from expression.

nicklockwood avatar nicklockwood commented on July 30, 2024

@ajkendall what @nighthawk said is correct. There is not currently any way to define precedence in the API. There is a hard-coded precedence table for common operators defined in the library, but any that are not defined (including ^) will have a precedence of zero (the same as +) by default.

I'm not sure off the top of my head if that's an appropriate default for ^. I guess that maybe it should have the same precedence as * instead? In which case feel free to add it to the internal precedence table and make a PR.

FWIW the reason I don't define ^ as one of the standard operators is that it is used to mean pow() in some languages and xor in others (with ** being the pow operator), so there didn't seem to be a clear choice as to which should be the default.

from expression.

ajkendall avatar ajkendall commented on July 30, 2024

@nighthawk thanks for pointing out that line in the ReadMe - I definitely missed that bit.... @nicklockwood - I hadn't considered the xor interpretation. Thanks a bunch for pointing out the precedence table. Making a PR seems like the best solution.

from expression.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.