I want to define a function named `^⅔`

, which means

```
using SymPy: Sym
^⅔(x::Sym) = x^(2 // 3)
^⅔(x::Number) = x^(2 / 3)
```

That is, I need `2 // 3`

for pretty-printing expressions in fractionals, but `2 / 3`

for speed in real calculations. But it does not seem to be parsable:

```
julia> ^⅔(x) = x^(2 / 3)
ERROR: syntax: invalid character "⅔" near column 2
...
```

I wish to somehow keep the simple syntax `a^⅔`

while I can dispatch on different types of `a`

.

`^`

is an infix operator, so you can’t use it in identifiers. You need to give your function a different name. (If you really want to, you could use `var"^⅔"`

as a name, but then you always need to write it like that with the `var`

.)

4 Likes

Elrod
August 22, 2020, 8:05pm
#3
You could look through the table of unicode input for alternatives. For example, `\invv\2/3`

which yields `ʌ⅔`

.

Another idea would be something like this:

```
using SymPy: Sym, @vars
struct TwoThirds end
const _⅔ = TwoThirds()
Base.:(^)(x::Number, ::TwoThirds) = x^(2 / 3)
Base.:(^)(x::Sym, ::TwoThirds) = x^(2 // 3)
```

Now:

```
julia> a, b = @vars a b;
julia> 3.4 ^ _⅔
2.261097438656042
julia> a * b ^ _⅔
2/3
a⋅b
```

You could also define other methods for `TwoThirds()`

like `+`

or `*`

.

5 Likes

That’s exactly what I am using. Thank you!