前スレ
PowerShell -Part 4
https://mevius.5ch.net/test/read.cgi/tech/1577862511/
次スレは>>980が立ててね!!
探検
PowerShell -Part 5
レス数が1000を超えています。これ以上書き込みはできません。
2021/03/18(木) 00:29:52.04ID:/MpReTiX
994デフォルトの名無しさん
2022/02/21(月) 16:22:43.74ID:Vv5lB4cH データのサンプル、期待する出力を書いてくれれば具体的なコード提案できるかも(たぶん)
995デフォルトの名無しさん
2022/02/21(月) 18:40:11.40ID:jIppNsU3 色々回答してありがとうございました
結局再帰を使わずループで代用する
こととしました
トランポリンはもう少し
勉強してみたいと思います
結局再帰を使わずループで代用する
こととしました
トランポリンはもう少し
勉強してみたいと思います
996デフォルトの名無しさん
2022/02/21(月) 20:07:10.97ID:+uSXi1Gh powershell内でC#埋め込めばいいんじゃないの
あいにくpowershellのクロージャはダイナミックスコープで使えたもんじゃないのでC#のサンプルだけ
Add-Type -TypeDefinition @"
using System;
public static class test {
static int fib(int n) { //普通の再帰
if (n < 2) {
return n;
} else {
return fib(n - 1) + fib(n - 2);
}
}
static void fibcps(int n, Action<int> cont) { // CPS(継続渡しスタイル)
if (n < 2) {
cont(n);
} else {
fibcps(n - 1, n1 =>
fibcps(n - 2, n2 =>
cont(n1 + n2)));
}
}
public static void recurse() {
for (var n = 0; n <= 20; ++n) {
Console.WriteLine("fib {0}: {1}",n,fib(n)); //普通の再帰
fibcps(n, r => Console.WriteLine("fibcps {0}: {1}",n,r)); // CPS(継続渡しスタイル)
}
}
}
"@
[test]::recurse()
あいにくpowershellのクロージャはダイナミックスコープで使えたもんじゃないのでC#のサンプルだけ
Add-Type -TypeDefinition @"
using System;
public static class test {
static int fib(int n) { //普通の再帰
if (n < 2) {
return n;
} else {
return fib(n - 1) + fib(n - 2);
}
}
static void fibcps(int n, Action<int> cont) { // CPS(継続渡しスタイル)
if (n < 2) {
cont(n);
} else {
fibcps(n - 1, n1 =>
fibcps(n - 2, n2 =>
cont(n1 + n2)));
}
}
public static void recurse() {
for (var n = 0; n <= 20; ++n) {
Console.WriteLine("fib {0}: {1}",n,fib(n)); //普通の再帰
fibcps(n, r => Console.WriteLine("fibcps {0}: {1}",n,r)); // CPS(継続渡しスタイル)
}
}
}
"@
[test]::recurse()
997デフォルトの名無しさん
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() }
上の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 変なやり方を広めようとするやつの典型例
999デフォルトの名無しさん
2022/02/22(火) 00:12:46.08ID:wYlI3N7E あえて混乱させようとしてるようにしか思えない
仮に末尾最適化でシリアルなコードを得たとして、まさかそれが木の探索に有利だとでも?
呼び出しをstart-(thread)jobで行ってスレッド/プロセスをばら撒けば済む話じゃないの
コールスタック溢れるような計算であればあるほど、スケーラブルで高速
仮に末尾最適化でシリアルなコードを得たとして、まさかそれが木の探索に有利だとでも?
呼び出しをstart-(thread)jobで行ってスレッド/プロセスをばら撒けば済む話じゃないの
コールスタック溢れるような計算であればあるほど、スケーラブルで高速
1000デフォルトの名無しさん
2022/02/22(火) 02:35:33.30ID:LHZaRsEg スタックを使わない再帰呼び出しならスタックは溢れないなw
個々の再帰呼び出しをStart-ThreadJob/Wait/Receiveで機械的に置き換えればとりあえず動く雛形にはなる
代わりにプロセス/スレッドが溢れるけど、スレッドなら単に順番待ちに入るだけで悪さはしない
個々のワーカーが自身の子をwaitしている限りはオーバーヘッドでしかないので、メインプロセスを設けStart時に-StreamingHostで直接報告を挙げさせるべき
長く走ってる枝を殺す等、最適化の可能性は大
メモ化や大域脱出程度で済むような問題には薦めない
個々の再帰呼び出しをStart-ThreadJob/Wait/Receiveで機械的に置き換えればとりあえず動く雛形にはなる
代わりにプロセス/スレッドが溢れるけど、スレッドなら単に順番待ちに入るだけで悪さはしない
個々のワーカーが自身の子をwaitしている限りはオーバーヘッドでしかないので、メインプロセスを設けStart時に-StreamingHostで直接報告を挙げさせるべき
長く走ってる枝を殺す等、最適化の可能性は大
メモ化や大域脱出程度で済むような問題には薦めない
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 341日 2時間 5分 41秒
新しいスレッドを立ててください。
life time: 341日 2時間 5分 41秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」 [ぐれ★]
- 広島・廿日市、おこめ券配布せず 全市民に3000円現金給付へ [どどん★]
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」★2 [ぐれ★]
- ラッパー般若、カンボジアに井戸を掘ることを決意 MCバトルの賞金2000万の使い道として ABEMAにて無料配信 [muffin★]
- 【警視庁】走行中の電車で女性に露出した下半身押しつけたか 無職の男(46)逮捕「チャンスがあればいつでもやる」 [nita★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★6 [七波羅探題★]
- 【高市フェリー】🇨🇳上海ー神戸・大阪🇯🇵を結ぶ国際定期フェリー「渡航の安全が確保できない」運航を中止 [485983549]
- 【実況】博衣こよりのえちえちチーズケーキを仕込み(雑談あり)🧪
- 嫌儲民「高市と中国のホットライン繋がらない!ギャオギャオ!!」 防衛相「そんな事実はない」 これじゃケンモジただのバカじゃん… [279254606]
- 【速報】1ポンド210円で日英GDP逆転(残り1.5円)...世界6位の経済規模に転落 [237216734]
- 54歳オッサンの晩飯がこちら
- 【高市悲報】中国軍「公海で空母の発着訓練するって事前通告したのになんで自衛隊機は急接近してきたんだ…?」中国軍困惑★2 [931948549]
