Syntax in Attache
This page is meant to document the syntax of Attache as a reference.
Data
Numbers are as you might expect, with a few, language-specific quirks:
3 ?? integer
4.3 ?? system float
7x ?? extended precision
2-4i ?? complex number with integer parts
3.4+2.9i ?? complex number with float parts
9x+12ix ?? complex number with extended precision parts
3//5 ?? fraction
There are various types of strings:
"Hello!" ?? normal string
"\x43" ?? normal string with hex escape
$"sum = ${3 + 4}" ?? interpolated string
`"C:\Users\attacher" ?? raw string
/`"[A-Z]\w+" ?? regex-like string
Operators
Operators are either unary or binary (aka: monadic and dyadic). All operators can exist in either form, even though they may lack definitions for those forms. For example, while % is only defined dyadically, the monadic syntax is still available.
Defining variables
Early versions of Attache used the Define and Local functions to work with variables. Now, := and .= serve those purposes. Usually, a variable assignment looks like this:
age := 14
Here is an example showing the difference between := (global assignment) and .= (local assignment):
x := 100 ?? declared in the global scope
{ ?? begin a new scope
Print[x] ?? 100, global x
x .= 32
Print[x] ?? 32, local x
}[]
Print[x] ?? 100, global x
You can define functions in a few different ways. The following are all equivalent ways of expressing f(x, y) = x + 2y:
f1 := { _ + 2*_2 }
f2 := ${ x + 2*y }
f3[x, y] := x + 2*y
f1 and f2 are different versions of lambdas, while f3 is an explicit definition. Under the hood, they all do the same thing.
You can overload operators:
?? test function
test := {
If[#__ = 1, ?? if unary
$"Unary: ${_}",
$"Other: ${Join[__, "; "]}"
]
}
?? overload both arities of an operator
`~ := test
Print[1 ~ 4] ?? Other: 1; 4
Print[~"q"] ?? Unary: q
?? overload only one arity of an operator
`!/2 := test ?? overload binary factorial
`+/1 := test ?? overload unary plus
Print[!3] ?? 6
Print[3!4] ?? Other: 3; 4
Print[+4] ?? Unary: 4
Print[3+4] ?? 7