如何进行OpenSCAD类似堆栈的操作?

时间:2014-05-06 10:26:35

标签: stack openscad

我对OpenSCAD很陌生,但其中大部分已经失败了。但是,我不确定如何进行类似堆栈的操作。只要我可以推送和弹出数字,使用什么数据结构并不重要。这可能吗?

1 个答案:

答案 0 :(得分:1)

我在实施string processing library时广泛使用堆栈。

诀窍是使用size = 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已经出来你可能会考虑使用列表理解,假设这是你真正需要的。