greek char functions (for fun)

70 views Asked by At

why can I write (in swift)

func β(a: Double, b: Double) -> Double { exp( lgamma(a) + lgamma(b) - lgamma(a + b) ) }

or

func Γ(_ x: Double) -> Double { tgamma(x) }

but not

func √(_ x: Double) -> Double { return sqrt(x) }
2

There are 2 answers

2
D M On

The square root character appears to be a valid operation identifier in Swift.

Character Unicode Value Unicode Name
221A SQUARE ROOT

Have you checked the last method declaration without the return keyword?

func √(_ x: Double) -> Double { sqrt(x) }
1
Rob Napier On

See Identifiers in the Swift Language Reference:

Identifiers begin with an uppercase or lowercase letter A through Z, an underscore (_), a noncombining alphanumeric Unicode character in the Basic Multilingual Plane, or a character outside the Basic Multilingual Plane that isn’t in a Private Use Area. After the first character, digits and combining Unicode characters are also allowed.

β and Γ are each a "noncombining alphanumeric Unicode character in the Basic Multilingual Plane." √ is not (nor does it meet any of the other requirements).

That said, √ is a valid operator, so you can write:

prefix operator √
prefix func √(_ x: Double) -> Double { return sqrt(x) }
print(√2)

The basic rules for Operators (from the document above) are:

Custom operators can begin with one of the ASCII characters /, =, -, +, !, *, %, <, >, &, |, ^, ?, or ~, or one of the Unicode characters defined in the grammar below (which include characters from the Mathematical Operators, Miscellaneous Symbols, and Dingbats Unicode blocks, among others). After the first character, combining Unicode characters are also allowed.

√ is included in "Mathematical Operators."