【问题标题】:How To Do OpenSCAD Stack-Like Operations?如何进行 OpenSCAD 类堆栈操作?
【发布时间】:2015-04-16 22:45:22
【问题描述】:

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

【问题讨论】:

  • 用例是什么?
  • 我正在尝试制作一个 OpenSCAD 程序,该程序将使用递归回溯方法生成迷宫。递归回溯算法的一部分涉及存储探索者对象“移动”通过的坐标。当资源管理器到达死胡同时,它会进入最后存储的坐标。在堆栈方面,它将坐标推送到堆栈,然后在卡住时将它们弹出。

标签: stack openscad


【解决方案1】:

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

诀窍是使用大小 = 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 版本已经发布,您可能会考虑使用列表解析,假设这是您真正需要的。

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2020-09-26
    • 2016-10-25
    • 2016-04-14
    相关资源
    最近更新 更多