2012年5月15日 星期二

JForthBlocks--控制結構IF..ELSE..THEN

Jimmy's papa今天學習如何使用Forth的if..then控制結構(Control Structure)積木,這類積木只能在定義(編譯)高階積木時使用,不能用在解譯時期,且if積木與then積木必須成對使用,if..then積木之間可巢狀內含其他的if..then積木

由於Forth後置語法的關係,邏輯條件運算必需先於if積木完成,if積木會取堆疊頂端值(Top of Stack),若數值不為0,則為真(True),若數值等於0,則為假(False)
下面是Jimmy's papa拉一拉積木,所做的範例
寄件者 scratchlab02
寄件者 scratchlab02
這是產生出來的Forth原始碼
: test if s" TOS is non-zero" then ; 1 test .s
寄件者 scratchlab02
寄件者 scratchlab02
這是產生出來的Forth原始碼
: test if s" TOS is non-zero" then ; 0 test .s
寄件者 scratchlab02
寄件者 scratchlab02
這是產生出來的Forth原始碼
: test if s" TOS is non-zero." else s" TOS is zero." then ; 1 test 0 test .s
執行exit積木,Forth將從目前的高階積木離開,此動作會清掉返回堆疊(Return Stack)頂端, 所以若高階積木有用到>r積木將資料暫存於返回堆疊(Return Stack),則需在執行exit積木之前, 先執行r>積木將暫存資料從返回堆疊(Return Stack)移回資料堆疊(Data Stack)
寄件者 scratchlab02
寄件者 scratchlab02
這是產生出來的Forth原始碼
: test dup 1 = if drop s" one" exit then 2 = if s" two" exit then ; 2 test .s

沒有留言:

張貼留言