Next: Arithmetic operators, Previous: Operators, Up: Operators [Contents][Index]
指定された優先順位を持つ新しい演算子を定義したり、 既存の演算子を未定義にしたり、既存の演算子の優先順位を再定義することが可能です。 演算子は単項前置、単項後置、二項中置、n項中置、マッチフィックスか無項でありえます。 「マッチフィックス」は引数を括るシンボルの対を意味し、 「無項」は引数を取らない演算子を意味します。 異なるタイプの演算子の例として、以下があります。
negation - a
factorial a!
exponentiation a^b
addition a + b
list construction [a, b]
(組み込みの無項演算子はありません; そんな演算子の例は、nofixを参照してください。.)
新しい演算子を定義するメカニズムはわかりやすいものです。 関数を演算子として宣言することだけが必要です; 演算子関数は定義されることもされないこともあります。
ユーザー定義の演算子の例は以下の通りです。
明示的な関数コール "dd" (a)は dd aと同値であり、また、
"<-" (a, b)は a <- bと同値であることに注意してください。
この例で、 "dd"と "<-"は未定義です。
(%i1) prefix ("dd");
(%o1) dd
(%i2) dd a;
(%o2) dd a
(%i3) "dd" (a);
(%o3) dd a
(%i4) infix ("<-");
(%o4) <-
(%i5) a <- dd b;
(%o5) a <- dd b
(%i6) "<-" (a, "dd" (b));
(%o6) a <- dd b
新しい演算子を定義するMaxima関数はこの表にまとめられます。 デフォルトの左と右の結合力(それぞれlbpとrbp)を記載します。 (結合力は演算子の優先順位を決めます。 しかしながら、左と右の結合力は異なることがあり、 結合力は優先順位より幾分複雑です。) 演算定義関数のいくつかは追加の引数を取ります; 詳細は関数記述を参照してください。
prefixrbp=180
postfixlbp=180
infixlbp=180, rbp=180
narylbp=180, rbp=180
matchfix(binding power not applicable)
nofix(binding power not applicable)
比較のために、いくつかの組み込み演算子と左右結合力を上げます。
Operator lbp rbp : 180 20 :: 180 20 := 180 20 ::= 180 20 ! 160 !! 160 ^ 140 139 . 130 129 * 120 / 120 120 + 100 100 - 100 134 = 80 80 # 80 80 > 80 80 >= 80 80 < 80 80 <= 80 80 not 70 and 65 or 60 , 10 $ -1 ; -1
removeと killは演算子プロパティをアトムから削除します。
remove ("a", op)は aの演算子プロパティだけを削除します。
kill ("a")は 演算子プロパティを含むaのすべてのロパティを削除します。
演算子名はクォーテーションマークで括らないといけないことに注意してください。
(%i1) infix ("##");
(%o1) ##
(%i2) "##" (a, b) := a^b;
b
(%o2) a ## b := a
(%i3) 5 ## 3;
(%o3) 125
(%i4) remove ("##", op);
(%o4) done
(%i5) 5 ## 3;
Incorrect syntax: # is not a prefix operator
5 ##
^
(%i5) "##" (5, 3);
(%o5) 125
(%i6) infix ("##");
(%o6) ##
(%i7) 5 ## 3;
(%o7) 125
(%i8) kill ("##");
(%o8) done
(%i9) 5 ## 3;
Incorrect syntax: # is not a prefix operator
5 ##
^
(%i9) "##" (5, 3);
(%o9) ##(5, 3)
Next: Arithmetic operators, Previous: Operators, Up: Operators [Contents][Index]