Script

比特幣腳本中的循環

  • December 23, 2021

根據這個問答,比特幣腳本中沒有循環:比特幣腳本系統故意不是圖靈完備的——為什麼?

我正在閱讀 reddit 文章中的評論,並意識到很少有for循環可以被if else語句替換以實現類似的效果:https ://www.reddit.com/r/Bitcoin/comments/rikjh0/any_one_smart_enough_to_answer_this/hoy8z52

這種方法有什麼問題?有沒有人試過這個?

您可以編寫循環程式碼…

for i=1 to 10
  print "Hello #",i
endfor

…作為…

print "Hello #1"
print "Hello #2"
print "Hello #3"
print "Hello #4"
print "Hello #5"
print "Hello #6"
print "Hello #7"
print "Hello #8"
print "Hello #9"
print "Hello #10"

它們是等效的程序。您甚至可以對具有可變端點的複雜循環執行此操作…

for i=1 to y
  print "Hello #",i
end for

…可以改寫為…

if y>=1 then print "Hello #",1
if y>=2 then print "Hello #",2
if y>=3 then print "Hello #",3
...(up to the maximum possible value of y)...

這稱為“循環展開”,理論上您可以對任何有限循環執行此操作,但正如您在上面的範例中看到的那樣,程式碼可能會變得非常大。

在比特幣中,你的腳本的大小在理論上和實際上在幾個地方都是有限的,所以這最終限制了你可以在比特幣腳本中展開的循環迭代的最大數量,但是可以像for i=1 to 5比特幣一樣實現低迭代計數循環使用展開的腳本。

引用自:https://bitcoin.stackexchange.com/questions/111337