トップ «前の日記(2008-03-22) 最新 次の日記(2008-03-24)» 編集

Orz日記 by Akio Morita

ToDo:

  • 15 SAD Fit[]回りの障害事例の解析
  • 10 smart pointer版PEGクラスの再実装(Left Recursionまわり)
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|06|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|06|07|08|10|12|
2016|01|02|03|05|06|08|10|11|
2017|01|02|03|04|05|06|07|09|10|11|12|
2018|01|02|03|04|06|07|08|09|10|11|12|
2019|01|03|04|05|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|

2008-03-22 [長年日記]

_ [LHC]なんか街中にマグネットが置いてあります

CERNの4月の一般公開(LHC運転前の最後一般公開になる予定)を 前に飾り付けが行われていますが、なんかLHCのマグネットを Meyrinの街中に飾っている模様。

Meyrinのバス通り沿いのロータリーには、Quadrupole Magnetが出現

また、CERNの Receptionから Rue de Meyrinを渡った向かい側の 球体状の建物の前には、Dipole Magnetが出現

_ [SAD]スロットの罠

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
  1. 小数部は切り捨てになる模様
  2. 実数が右結合してるのだから、ある意味当然の帰結
  3. 個人的には、1.5の次の.は実数の一部にはなれないのでトークンの区切りになり(,#1.5,.,#2,),&と分解されるのを期待していたのだが、謎な挙動である
  4. 負の実数は、正の実数リテラルに右結合-演算子であるが、左結合-演算子が優先するので、予想通りの動作
  5. これを、構文解析器がACCEPTするべきかは疑問の余地が...(後述)
  6. ちょっとまて、すくなくとも(#0)&と同じ解釈をすべきでない?

純関数(#0)&

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で適用時にエラーにするくらいなら、 純関数オブジェクト生成時に構文エラーにすべきでない?

_ [SAD]3D RMS Beam Envelope Simulationの移植版公開

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 | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記