
160
|
第 5 章
increment_rules(added_one, added_two) +
increment_rules(added_two, added_three)
)
=> #<struct DTMRulebook rules=[…]>
>> rulebook.rules.length
=> 18
>> tape = Tape.new(['1', '0', '1'], '1', [], '_')
=> #<Tape 101(1)>
>> dtm = DTM.new(TMConfiguration.new(added_zero, tape), [added_three], rulebook)
=> #<struct DTM …>
>> dtm.run; dtm.current_configuration.tape
=> #<Tape 111(0)_>
以這種方式組成狀態和規則的能力,不需要任何明確的支援副常式,只要我們以機器的
大小準備好接受相關的遞增,就能建置任何大小和任何複雜程度的圖靈機規則手冊。
數個磁帶
有時候透過擴充機器的外部儲存空間,可以增加機器的運算能力。舉例來說,如果我們
讓下推自動機存取第 2 個堆疊,它的運算能力會變得更強大,因為兩個堆疊可以用來模
擬無限大的磁帶:每個堆疊儲存模擬磁帶的一半字元,而為了模擬磁帶頭的移動,PDA
可以在堆疊與堆疊之間提出和推入字元,就如同我們在第 148 頁『模擬物』裡的
Tape
實作物。任何存取無限大磁帶的有限狀態機都是圖靈機,所以只需要再加入額外的堆 ...