解說:


這個程式只能在我寫的 FORTH 系統中執行,太多程式細節,連機械碼都用上了 ( HEX $C3 ) :
: LOVE ( -- )
   [ HERE ] HUMAN-LIMIT BALANCE !
   $C3 LITERAL ! ;
這是程式的 Initial code, BALANCE 的初始值是 HUMAN-LIMIT = 7 ; "HUMAN-LIMIT BALANCE !" 的意思是,"把 HUMAN-LIMIT 存到 BANANCE去", 這個動作只發生一次,機械碼技巧。

程式的執行結果很單調,如下:

FLOAD THISMAN.4TH <-- 載入程式並執行
LOVE LOVE LOVE LOVE LOVE LOVE LOVE
LOVE LOVE LOVE LOVE LOVE LOVE
LOVE LOVE LOVE LOVE LOVE
LOVE LOVE LOVE LOVE
LOVE LOVE LOVE
LOVE LOVE
LOVE
NUMB
HATE
HATE HATE
ok
<-- 系統回應

以上是 LOVE&HATE 執行的結果,也就是 "10 YEARS ! LOVE WAITING" 的結果:
: LOVE&HATE
  10 YEARS !   
// 把 10 存到 YEARS 去
  LOVE WAITING ; // 執行 LOVE 再執行 WAITING
唸起來蠻順口的。

THISMAN LOVE&HATE <-- 繼續再執行 THISMAN 的 LOVE&HATE
HATE HATE HATE
HATE HATE HATE HATE
HATE HATE HATE HATE HATE
HATE HATE HATE HATE HATE HATE
Too much HATE HATE HATE HATE HATE HATE HATE


<-- 系統重新啟動,螢幕立即清除,所以上面的東西是看不到的,此後再執行 THISMANLOVE&HATE 也沒用,因為 HUMAN 已經指到 DEAD

FORGET THISMAN ok <-- 忘了此人
THISMAN THISMAN ? <-- 此人已被遺忘,系統問道:「此人是誰」?
LOVE&HATE LOVE&HATE ? <-- 純邏輯世界中沒有LOVE&HATE可言

其他的細節 :
: WAITING ( -- )
  CR
       // 換行
  YEARS @ 0 DO // 迴圈,作 YEARS 次
   BALANCE DRYS-UP?  // 檢查看此人「枯竭」了沒
   OUTSIDE-INFLUENCE  // 執行 OUTSIDE-INFLUENCE
   HUMAN        // 執行 HUMAN
   BEAR          // 執行 BEAR
  LOOP ;

: DRYS-UP? ( addr -- )
  @ ABS 1 <= IF
 // 把 BALANCE 的值取絕對值,和 1 相比
    HUMAN_IS_EMOTIONAL // 執行 HUMAN_IS_EMOTIONAL
  ENDIF ;

: HUMAN_IS_EMOTIONAL
  EMOTION CELL+ IS EMOTION
 // EMOTION 跳到下一狀態
   EMOTION @ IS HUMAN ;    // 稍後解釋

HERE IS EMOTION // 這兒是 EMOTION 的狀態列表,唸起來也很順
' .LOVE , // <-- EMOTION 的起始狀態
' .LOVE , // <-- EMOTION = EMOTION + CELL
' .NUMB , // <-- EMOTION = EMOTION + CELL
' .HATE , // <-- EMOTION = EMOTION + CELL
DEAD ,   // <-- EMOTION = EMOTION + CELL

EMOTION @ IS HUMAN

這句也有意思,把 EMOTION 的狀態取出來給 HUMAN 去執行,所以剛開始執行 HUMAN 會執行 ".LOVE",所以秀出第一行七個LOVE,有意思的地方在,「@」在 FORTH 的意義是「取出」,唸「fetch」所以可將 EMOTION @ IS HUMAN 翻成 :

情緒 取 是 人 // 人是情緒取向的 = 人不是理性的動物

回到 WAITING 這個字,OUTSIDE-INFLUENCE 是 THISMAN 的唯一「界面」,在前面有兩行

-1 CONSTANT INSIDE-INFLUENCE // 「此人」的心理傾向負面思想
' NOOP IS OUTSIDE-INFLUENCE // NOOP 是 NO OPeration,初始狀態 : 沒有外界的影響

接著 WAITING 又執行 HUMAN ,依當時的 EMOTION 狀態秀出無聊的長條圖,再執行 BEAR :
: BEAR ( addr -- )
  INSIDE-INFLUENCE BALANCE +! ; 
// BALANCE = BALANCE + (-1)

∴BALANCE 會從 7 6 5 4 3 2 1 0 -1 1 ... ,DRY-UP? 會依 BALANCE 值改變 EMOTION 和 HUMAN 的狀態。

WAIT-TOO-LONG 是描述「此人」的特性。如何 HUMAN 會成為 DEAD。
: WAIT-TOO-LONG
  HUMAN-LIMIT 1+ 2 * YEARS ! 
// (7+1)*2 = 16
  LOVE WAITING ;

一執行 WAIT-TOO-LONG 系統馬上重新啟動,和執行 LOVE&HATE 兩次的結果一樣,
EMOTION @ == DEAD ∴ DEAD IS HUMAN



路客

Email: comforth@ms2.hinet.net