1

私は OpenSCAD にかなり慣れていませんが、ほとんどのことを理解しています。ただし、スタックのような操作を行う方法がわかりません。数値をプッシュおよびポップできる限り、どのデータ構造が使用されているかは問題ではありません。これは可能ですか?

4

1 に答える 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 に答える