我是自己做的,我只是想确认它是对的。我应该修改堆栈的ADT规范,以便将操作视为计数(返回堆栈中元素的数量),change_top(用给定元素替换堆栈的顶部)和wipe_out(删除所有元素)。还要根据需要包括新的公理和先决条件。
这就是我所拥有的:
TYPES
• STACK[G]
FUNCTIONS
• put: STACK[G] x G -> STACK[G]
• remove: STACK[G]-/> STACK[G]
• item: STACK[G] -/> G
• empty: STACK[G] -> BOOLEAN
• new: STACK[G]
• count: STACK[G] -> INTEGER
• change_top: STACK[G] x G -> STACK[G]
• wipe_out: STACK[G]
AXIOMS
For any x:G, s:STACK[G]
• A1 - item(put(s,x)) = x
• A2 - remove(put(s,x)) = s
• A3 - empty(new)
• A4 - not empty(put(s,x))
• A5 - count(new)
PRECONDITIONS
• remove(s:STACK[G]) require not empty(s)
• item (s:STACK[G]) require not empty(s)
• change_top (s:STACK[G]) require not empty(s)
答案 0 :(得分:1)
您是否可以与TA交谈?无论如何,change_top
应标记为-/>
,因为您给了它一个先决条件。 wipe_out
应该采用堆栈参数吗?
Axiom A5
格式不正确,因为count
返回一个整数,而不是布尔值。你需要count
的另一个公理,以及change_top
和wipe_out
的公理。