Janet 1.38.0-73334f3 Documentation
(Other Versions: 1.37.1 1.36.0 1.35.0 1.34.0 1.31.0 1.29.1 1.28.0 1.27.0 1.26.0 1.25.1 1.24.0 1.23.0 1.22.0 1.21.0 1.20.0 1.19.0 1.18.1 1.17.1 1.16.1 1.15.0 1.13.1 1.12.2 1.11.1 1.10.1 1.9.1 1.8.1 1.7.0 1.6.0 1.5.1 1.5.0 1.4.0 1.3.1 )

Infix Syntax

A macro for infix syntax in Janet. Useful for math.

     ($$ a + b ** 2)            --->   (+ a (math/pow b 2))
     ($$ (a + b) ** 2)          --->   (math/pow (+ a b) 2)
     ($$ y[2] + y[3])           --->   (+ (in y 2) (in y 3))
     ($$ a > b and ,(good? z))  --->   (and (> a b) (good? z))

Syntax is as follows:

Binary operators <<, >>, >>>, =, !=, <, <=, >, >=, &, ^, bor, band, and, or, +, -, *, /, %, ** are supported. Operator precedence is in the `precedence table below (higher means more tightly binding). All operators are left associative except ** (math/pow), which is right associative.

Unary prefix operators !, -, bnot, not, ++, -- are supported. No unary postfix operators are supported.

Square brackets can be used for indexing.

Normal parentheses are used for making subgroups

You can "escape" infix syntax use a quote or unquote (comma)

Precedence Table

(def- precedence
  {'>> 9
   '<< 9
   '>>> 9
   '= 8
   '!= 8
   'not= 8
   '< 8
   '<= 8
   '>= 8
   '> 8
   '& 7
   '^ 6
   'bor 5
   'band 5
   'and 4
   'or 3
   '+ 10
   '- 10
   '* 20
   '/ 20
   '% 20
   '** 30
   '! 40
   'not 40
   'bnot 40
   '++ 40
   '-- 40})

Index

infix/$$


infix/$$ macro source

($$ & body)

Use infix syntax for writing expressions in a more familiar manner. Useful for writing mathematic expressions.