10

Mathematica 7 で以下のカスタム記法を設定したいと考えています。

この表記法はそれ自体では特に有用ではないため、既存の代替案を提案したり、これがいくつかのキーストロークを節約するだけであることを指摘したりしないでください。

それができるかどうか、またどのようにできるか知りたいです。


現時点では、

f = #2 + #^2 / #3 & @@ # & ;

f[ {a, b, c} ]

Out[]= b + a^2 / c

内部関数#^2 / #3 + #2 &Apply最初の引数に渡されます。


構文を実装したい

f = #2 + #^2 / #3 @@& ;

まったく同じように動作させます。つまり、最初の引数に自動的に適用される@@&a を表します。Function

シンボルと同じバインディングを持つ必要があります。&


の使用はテキストを介して伝達するのがより困難ですが、同様の表記法を簡単に設定できるようにするために、Notations可能な限り手動ではなくパッケージでこれを行うことが望ましいです。MakeBoxesNotations

4

1 に答える 1

9

独自の発明の演算子構文(のような)ではこれを行うことはできません@@&。Mathematicaには、そのように実行時に言語文法を変更する機能がありません。

パッケージで少なくとも途中までは到達できますがNotation、Mathematicaでは意味のない記号を使用する必要があります。おそらく、組み込みの意味のない演算子の1つを使用して、ほとんどの場合(存在する場合)を使用する必要があります。それらはpostfix演算子としてバインドされません。

ここでは、たとえば、Notationsパッケージを使用して、\[Wolf]文字を次の代わりに明らかに疑似接尾辞演算子として定義し@@&ます。

In[1]:= Needs["Notation`"]

In[2]:= Notation[x_ \[Wolf] \[DoubleLongLeftRightArrow] (x_ @@ # &)]

In[3]:=  f=#2+#^2/#3& \[Wolf]
Out[3]= (#2+#1^2/#3&) \[Wolf]

In[4]:= f[{a,b,c}]
Out[4]= b+a^2/c

これには表記が含まれるため、スクリーンショットも含めます。

オペレーターハッカリーの例

このアプローチが失敗する可能性があるのは、のような任意の記号に演算子の優先順位を設定できないという事実です\[Wolf]。代わりに、上記でリンクした意味のない演算子の1つを使用できますが、それらには変更できない固定の優先順位もあります。

ドキュメントで見つけた場合PrecedenceForm、簡単な誤った希望を得るかもしれませんが、ドキュメントが言うように、それは印刷にのみ影響し、評価には影響しません。

HTH!

于 2011-03-14T22:42:44.993 に答える