ToDo:
CERNの4月の一般公開(LHC運転前の最後一般公開になる予定)を 前に飾り付けが行われていますが、なんかLHCのマグネットを Meyrinの街中に飾っている模様。
Meyrinのバス通り沿いのロータリーには、Quadrupole Magnetが出現
また、CERNの Receptionから Rue de Meyrinを渡った向かい側の 球体状の建物の前には、Dipole Magnetが出現
Mapに渡すために二つの行列の積を返す純関数を素直に
(#2.#1)&
と書いて、MapThreadに食わせてみたとこと、なぜか結果がおかしなことに...
演算結果を見る限り行列の要素毎の積になってるので、どうやら
(#2 #1)&
と解釈さているようです。何故... Orz
なんと、スロット演算子#に右結合するオペランドは実数らしい! つまり、最初の例では、(, #2., #1, ), &と 5個のトークンに分解されるようです。
対処としては、
((#2).#1)&
と書くか
(#2 . #1)&
のように明示的にwhitespaceを挿入すれば良いわけだが、 スロット演算子の意味付けから整数以外のものと結合する意味は 無いので、もう少し構文定義が改良できんものかねぇ
もっとも、SADの実装では構文定義から構文解析器を生成しているのではなく 直接構文解析器を書き下しているので、副作用が怖くて修正できん。 (この前の~演算子への修正で、予期しない構文定義への副作用が 発生していたのも、これが原因かと)
| No | 入力 | SADの解釈結果 | 
| 1 | (#1.6)& | (#&) | 
| 2 | (#2.5e2)& | (#25&) | 
| 3 | (#1.5.#2)& | ...#でプロンプト | 
| 4 | (#-1)& | (-1+#)& | 
| 6 | (#0)& | (#0&) | 
| 5 | (#0.5)& | segmentation fault | 
f = (#0)&;
を定義して、f[]とかf[0]とかやってみる。 なにが返ってくるのだろう...わくわく
って、なにこの味気の無い出力
 In[1]:= f = (#0)&
Out[1]:= (#0&)
 In[2]:= f[]
???General::slot:  Undefined Slot #0 in (#0&)[]
???General::abort:  Aborted:
f[]
   ^
 ???-FFS-Error-?Undefined command or element: F[]
 In[2]:= f[0]
???General::slot:  Undefined Slot #0 in (#0&)[0]
???General::abort:  Aborted:
f[0]
    ^
 ???-FFS-Error-?Undefined command or element: F[0]
 In[2]:=
General::Slotで適用時にエラーにするくらいなら、 純関数オブジェクト生成時に構文エラーにすべきでない?
2005年にChristopher K. Allenが SAD V1.0.8.x向けに書いた 3D RMS Beam Envelope Simulationを Extension module形式にして移植しました。 移植に当たっては、MatrixFunctions.nをすべてCで再実装することで オリジナル版に比べ 例題の 実行速度は約5倍に高速化されています。
使い方とか中身の原理に関しては、 http://www-linac.kek.jp/seminar/allen.htmlを参照
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記