我已经定义了F#树和栈类型,在栈上有一个pop成员。我不能在pop的结果上得到正确的类型签名。下面是我的代码,直到我尝试使用pop:
type Tree<'a> =
| Tree of 'a * 'a Tree * Tree<'a>
| Node of 'a
| None
type 'a Stack =
| EmptyStack
| Stack of 'a * 'a Stack
member x.pop = function
| Emp
我知道我可以通过以下代码创建字典的子集:
#I get only fields a,b and c from the old dict
newdict = {k: olddict.get(k, None) for k in ('a', 'b', 'c')}
但是,假设我需要所有的字段,除了"d“和”e“..is之外,还有一种方法可以逆转这段代码吗?
Push(A)
Push(B)
Pop
Pop
Push(C)
Push(A)
Pop
Push(X)
这将导致我得到这个线性列表:
X
C
但是,这看起来像一个数组吗?是stack={X,C}还是stack={C,X}?
据我所知,它应该是X,C,因为堆栈的顶部是头部,其他所有东西都是底部(尾部),所以在这种情况下,C必须是尾部,X是头部,这就是X,C。然而,在我刚刚接受这个之前,我只是认为征求别人的第二个意见是明智的,谢谢!
编辑:我只记得栈是后进先出( LIFO )结构……这只会让事情变得更复杂。如果“最后一个”是第一个被移除的,那么按照这个逻辑,数组看起来就像C,X,不是吗
我正在写一种基于堆栈操作的笑话语言。我试图找到使它完成图灵所需的最小数量的指令,但不知道基于一个堆栈的语言是否可以是图灵完整的。这些指令够了吗?
IF (top of stack is non-zero)
WHILE (top of stack is non-zero)
PUSH [n-bit integer (where n is a natural number)]
POP
SWAP (top two values)
DUPLICATE (top value)
PLUS (adds top two values, pops them, and pushes result)
我看了几个问题和