PowerShell -Part 5

レス数が1000を超えています。これ以上書き込みはできません。
2021/03/18(木) 00:29:52.04ID:/MpReTiX
前スレ
PowerShell -Part 4
https://mevius.5ch.net/test/read.cgi/tech/1577862511/

次スレは>>980が立ててね!!
2022/02/21(月) 21:16:04.35ID:+uSXi1Gh
一応powershell版。ただしpowershell関数は末尾再帰の最適化をしてくれないためCPSで書いてもただの効率悪い再帰にしかならない。
上のC#も32bit環境だと末尾再帰の最適化が働かないため64bit環境でのみ有効なコード。
function fib($n) {
 if ($n -lt 2) {
  $n
 } else {
  (fib ($n - 1)) + (fib ($n - 2))
 }
}
function fibcps($n, $cont) {
 if ($n -lt 2) {
  & $cont $n
 } else {
  fibcps ($n - 1) {param($fib1); $cont = $cont
   fibcps ($n - 2) {param($fib2);
    & $cont ($fib1 + $fib2) }.GetNewClosure()}.GetNewClosure()
 }
}
1..10 | %{ $r=fib $_; "fib($_):$r" }
1..10 | %{ fibcps $_ {param([int]$r) "fibcps($_):$r"}.GetNewClosure() }
998デフォルトの名無しさん
垢版 |
2022/02/21(月) 21:38:24.93ID:MnJW8OUO
変なやり方を広めようとするやつの典型例
2022/02/22(火) 00:12:46.08ID:wYlI3N7E
あえて混乱させようとしてるようにしか思えない

仮に末尾最適化でシリアルなコードを得たとして、まさかそれが木の探索に有利だとでも?

呼び出しをstart-(thread)jobで行ってスレッド/プロセスをばら撒けば済む話じゃないの
コールスタック溢れるような計算であればあるほど、スケーラブルで高速
2022/02/22(火) 02:35:33.30ID:LHZaRsEg
スタックを使わない再帰呼び出しならスタックは溢れないなw
個々の再帰呼び出しをStart-ThreadJob/Wait/Receiveで機械的に置き換えればとりあえず動く雛形にはなる
代わりにプロセス/スレッドが溢れるけど、スレッドなら単に順番待ちに入るだけで悪さはしない

個々のワーカーが自身の子をwaitしている限りはオーバーヘッドでしかないので、メインプロセスを設けStart時に-StreamingHostで直接報告を挙げさせるべき
長く走ってる枝を殺す等、最適化の可能性は大

メモ化や大域脱出程度で済むような問題には薦めない
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 341日 2時間 5分 41秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況