簡單的。
StandardEncoding ==
或者帶有索引。十進制:
0 StandardEncoding { exch dup =only(:)print 1 add exch == } forall pop
八:
0 StandardEncoding { exch dup 8 3 string cvrs =only(:)print 1 add exch == } forall pop
十六進制:
0 StandardEncoding { exch dup 16 2 string cvrs =only(:)print 1 add exch == } forall pop
此外,你應該知道,/StandardEncoding
是文字名(因爲/
的),因此名稱本身坐在堆棧上。如果您已經完成了下一步並轉換爲字符串,則只會打印單詞「StandardEncoding」。因此,要自動加載(並可能執行)與名稱關聯的值,請刪除斜槓(/
),使其名稱爲可執行文件。字StandardEncoding
(沒有斜槓!)成爲矢量。斜線的工作方式與Lisp-family語言中的quote
非常相似。
爲了說明,這裏有更多的方法來打印和迭代數組。
StandardEncoding {
(%stdout)(w)file exch 80 string cvs writestring
(%stdout)(w)file (\n) writestring
} forall
StandardEncoding
0 1 2 index length 1 sub { % Arr i
2 copy get 80 string cvs print % Arr i
(\n) print % Arr i
pop % Arr
} for
[ StandardEncoding 0 {
{
2 copy get ==only
()=
1 add
} loop
} stopped cleartomark
這最後一個使用一個無限循環並捕獲信號通知時get
嘗試讀取不存在的單元的rangecheck
錯誤。它會在堆棧中留下5個值(StandardEncoding 256 StandardEncoding 256 true
),您可以用cleartomark
(如圖所示)或簡單地pop pop pop pop pop
(或5{pop}repeat
)丟棄這些值。
編輯:進一步玩最後一個例子。這將錯誤陷印隔離到預計會拋出錯誤的操作符。隔離預期的錯誤可以讓任何意外的錯誤打印出正常的診斷結果。
[ StandardEncoding 0 {
2 copy
{ get } stopped { exit } if
==only()=
1 add
} loop cleartomark
謝謝,第一個很簡單,完美地完成了這項工作 – user1043479 2013-03-14 07:11:38