ToDo:
Y = With[{core = #}, With[{procedure = #}, core[procedure[procedure][##]&]]&[ With[{procedure = #}, core[procedure[procedure][##]&]]&]]&;
生成した再帰関数を包むpure functionで、##を 受けとるようにしただけ
リストの平均値を求める
avgY = Y[With[{action = #}, Which[ Length[{##}] < 3, action[#1, 0, 0], Length[#1] > 0, action[Rest[#1], #2 + 1, #3 + First[#1]], True, #3 / #2]&]&];
リストの標準偏差を求める
sigmaY = Y[With[{action = #}, Which[ Length[{##}] < 4, action[#1, 0, 0, Y[With[{action = #}, Which[ Length[{##}] < 3, action[#1, 0, 0], Length[#1] > 0, action[Rest[#1], #2 + 1, #3 + First[#1]], True, #3 / #2]&]&][#1]], Length[#1] > 0, action[Rest[#1], #2 + 1, #3 + (First[#1] - #4)^2, #4], True, Sqrt[#3 / (#2 - 1)]]&]&];
最初に平均値を求める部分に avgY相当の無名関数を使っている
単純な再帰を Y-Combinatorで書いた基本形
factY = Y[With[{action = #}, Which[ # < 1, 1, True, # * action[# - 1]]&]&];
アキュムレータを導入して、末尾再帰化
factY = Y[With[{action = #}, Which[ Length[{##}] < 2, action[#, 1], #1 < 1, #2, True, action[#1 - 1, #2 * #1]]&]&];
最初の呼び出し(アキュムレータの初期化)を再帰の外に出した移す
factY = Y[With[{action = #}, Which[ #1 < 1, #2, True, action[#1 - 1, #2 * #1]]&]&][#, 1]&;
Core i7 6700K機に変えて、Ryzen5950Xをメイン鯖に投入
併せて、KVMをATEN CS1784AからCS1824に交換し、DVI-D dual link + USB2から HDMI 2.0 + USB 3.0環境へ更新実施
運用停止からCS1784A/DVI-Dケーブルの撤去、CS1824設営・新鯖への交換で3時間程度
モニタ接続を4k DCI対応のHDMI 2.0にした4-port KVMで、VGA/DVI-D時代のビデオダイナシンク (技術的にはEDIDエミュレート) に対応しPC側からみて常時モニタが実在するように振る舞える。
今まで、DVI-Dで 4K 30Hz or WQHD 60Hz運用で我慢してきたのも、EDIDエミュレートできる4K 60Hz対応で手頃な DP/HDMI KVMが無かったからで…Orz (例えば、DP KVMに外付けEDIDエミュレータをPC側に挟むとかで実現するけど、Port数分のEDIDエミュレータが必要な罠)
で、使い心地ですが…
な具合でなかなかいい感じ
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記