トップ «前の日記(2008-06-20) 最新 次の日記(2008-06-23)» 編集

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|10|11|

2008-06-22 [長年日記]

_ [SAD]Ticket-16の件

これって、組み込み関数シンボルを特殊扱いしているせいでは無いだろうか...

組み込み関数を直接書かなければ、

 In[1]:= f = Sin
Out[1]:= Sin
 In[2]:= Hold[f[1]]
Out[2]:= Hold[f[1]]
 In[3]:= ReleaseHold[Out[2]]
Out[3]:= .841470984807896

になるようです

おそらく、itfunalocで定義した組み込み関数は SADScript側から 再定義出来ないので、Hold[]前とReleaseHold[]後の評価結果が 一致することを暗に仮定して正格評価を行っていると思われる。

さらに、Hold[]にツッコミを入れると、Hold[]が実際に保存するのは 評価前の構文木なわけで、組み込み関数はシンボルその物ではなく 関数番号が構文木に組み込まれるので、Hold[]した結果を ReleaseHold[]する前に itfunalocで定義済みの関数シンボルを オーバーライドするとReleaseHold[]時に評価される関数は、 オーバーライド後ではなくオーバーライド前の関数になるという 一見不可思議な現象が発生します。 さらに、Hold[]を ToStringでシリアル化してToExpressionで式に 変換した場合はオーバーライド後の関数に化けるはず。

本日のツッコミ(全1件) [ツッコミを入れる]
_ AC (2008-06-23 01:11)

SADTkinterのマニュアルのp.98には<br> Hold[Sin[1]] ⇒ Hold[Sin[1]]<br>と書いてあるのだが、マニュアルを訂正すべきなのだろうか。


カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記