我经常发现自己处于这样的情况:
IN: scratchpad: TUPLE: box
length width height ;
IN: scratchpad { { 1 2 3 } { 4 5 6 } { 6 7 8 } }
--- Data stack:
{ ~array~ ~array~ ~array~ }
IN: scratchpad [ V{ } clone-like ] dup [ map ] dip call
--- Data stack:
V{ ~vector~ ~vector~ ~vector~ }
IN: scratchpad [ dup pop swap dup pop swap dup pop swap drop box boa ] map
--- Data stack:
V{ ~box~ ~box~ ~box~ }
IN: scratchpad dup .
V{
T{ box { length 3 } { width 2 } { height 1 } }
T{ box { length 6 } { width 5 } { height 4 } }
T{ box { length 8 } { width 7 } { height 6 } }
}
这达到了我想要的结果,但是:
dup pop swap
必须复制/粘贴与我要销毁的数组中的项目相同的次数,并且该数组必须首先clone-like
d 到一个V{ }
向量,并且......这真是太糟糕了,乱七八糟的代码。(请注意,3 [ dup pop swap ] times
由于堆栈效应,这将不起作用。)
必须有更好的方法TUPLE
从数组的项中构造 a 的实例。它是什么?