13 func (stk stack) isEmpty() bool {
14 return stk.stackEntry == nil
17 func (stk stack) top() string {
24 func (stk stack) add(str string) stack {
32 func (stk stack) addFromStack(other stack) stack {
36 res := stk.addFromStack(other.drop())
37 return res.add(other.top())
40 func (stk stack) drop() stack {
47 func (stk stack) dropN(n int) stack {
55 func (stk stack) find(str string) int {
62 res := stk.drop().find(str)
69 func (stk stack) roll(n int) stack {
70 var x func(stack, int) (stack, string)
71 x = func(stk stack, n int) (stack, string) {
73 return stk.drop(), stk.top()
75 stk2, entry := x(stk.drop(), n-1)
76 return stk2.add(stk.top()), entry
78 stk, entry := x(stk, n)
82 func (stk stack) swap() stack {
87 return stk.add(a).add(b)
90 func (stk stack) dup() stack {
91 return stk.add(stk.top())
94 func (stk stack) over() stack {
99 func (stk stack) pick(n int) stack {
100 t := stk.dropN(n).top()
104 func (stk stack) String() string {
105 if stk.stackEntry == nil {
108 var x func(stk stack) string
109 x = func(stk stack) string {
110 if stk.stackEntry == nil {
113 return x(stk.drop()) + " " + stk.stackEntry.str
115 return "[..." + x(stk) + "]"