私は OpenSCAD にかなり慣れていませんが、ほとんどのことを理解しています。ただし、スタックのような操作を行う方法がわかりません。数値をプッシュおよびポップできる限り、どのデータ構造が使用されているかは問題ではありません。これは可能ですか?
質問する
202 次
1 に答える
1
文字列処理ライブラリを実装している間、私はスタックを広範囲に使用しました。
秘訣は、サイズ = 2 のネストされた右連想リストを使用することです (例: ["foo", ["bar", []]])。
何かをスタックにプッシュしたい場合:
function push(stack, item) = [item, stack];
スタックをポップしたい場合:
function pop(stack) = stack[1];
そして、ポップされた値をピークまたは取得したい場合:
function peek(stack) = stack[0];
再帰を使用して map/reduce 関数を実装することもできます。
function map(stack) =
push(
map(pop(stack)),
f(peek(stack))
);
function reduce(stack) =
f(peek(stack))?
push(
reduce(pop(stack)),
f(peek(stack))
)
:
reduce(pop(stack))
;
もちろん、バージョン 2015.03 が出たので、リスト内包表記が本当に必要なものであると仮定して、リスト内包表記の使用を検討するかもしれません。
于 2015-04-16T14:45:22.673 に答える