Yahoo Answers is shutting down on May 4th, 2021 (Eastern Time) and beginning April 20th, 2021 (Eastern Time) the Yahoo Answers website will be in read-only mode. There will be no changes to other Yahoo properties or services, or your Yahoo account. You can find more information about the Yahoo Answers shutdown and how to download your data on this help page.

琬庭
Lv 6
琬庭 asked in 社會與文化禮儀 · 2 decades ago

何 謂...符式语言??

符式语言..................?!!是關於什麼呢 !?...

3 Answers

Rating
  • 2 decades ago
    Favorite Answer

    Forth 簡介

    Forth 語言是一種發展性很高的電腦語言而且提供了交談式 (Interactive)

    程式發展環境,給使用者使用。原本 Forth 只被發展且用在小型計算機的系統上,

    你可以看到幾乎所有的各型微處理機上均有各型各色的 Forth 系統被發展出來。

    Forth 也可以被用在更寬廣的應用上如 Spread Sheet,Expert Systems 和

    多工的 database 上等。

    Forth 是擁有兩堆疊的虛擬機器

    在表面上 Forth 是擁兩個堆疊可以直接執行的電腦程式語言。在實質上這個

    虛擬機器是由程式計數器 (Program Counter),Memory (記憶體), ALU

    (數學計算單元) 和 FILO (first-in, Last out),資料堆疊 (Data Stack

    及 FILO 迴返堆疊 (Return Stack) 所構成的,是一套完整的 CPU 結構 。

    Data Stack (資料堆疊)

    Forth 指令或程式均可自資料堆疊獲得參數並將其結果放回資料堆疊中。此資料堆疊

    可視為以先進後出 (FILD) 方式的暫存器組,專門處理 Forth 指令所需的參數及結果。

    舉例而言,若要計算 3+ 4 * 5,所需指令為 "+" 及 "*"。

    因Forth指令均為後運算符法 (Post fix notation),上述計算變成

    從鍵盤輸入 3 4+5*

    從螢幕輸出 35 Ok

    。 3 先被放入資料堆疊中

    。接著 4 被放入資料堆疊,而 3 被擠入資料堆疊下層中

    。接著 + 指令自資料堆疊中取得兩個數據產生的結果 7,放入資料堆疊中

    。接著 5 亦放資料堆疊中,而 7 被擠入下一層資料堆疊中

    。接著 * 指令自資料堆疊中取得兩個數據產生的結果為 35,放入資料堆疊中。

    。接著 .指令自資料堆疊變成空的。

    。"ok" 是 Forth 的提示字元。

    要瞭解 Forth 語言,看得懂所設計的程式,首要的事,即要很清楚資料堆疊的運做,

    並時時清楚它的狀態及內容。另外 Forth 有維護資料堆疊的指令如 :

    DUP (Duplicate) - 複製資料堆疊最上層的一個資料。

    SWAP -- 資料堆疊最上面二層的資料互相交換位置。

    迴返堆疊及 Forth 程式

    Forth 的程式和一般的電腦語言不太一樣。一般 Forth 的程式其實是一段 "定義",

    一個副程式會以一個字或指來代表或呈現。而所有字(副程式庫)的集合,我們稱之為字典

    (Dictionary) 所以 Forth 的程式是由一些在字典的 "字" (副程式),所組成一個

    新的 "定義",新的 "字" (副程式),如此結構化一層一層組成的。

    在 Forth 中副程式呼叫和迴返 (Return) 是相當頻繁且重要的。此呼叫和迴返所需的地址

    Forth 以透過迴返堆疊 -- 另一個類似暫存器檔的機構來完成。迴返堆疊亦是一個 FILO

    (first-in Last out) 結構的堆疊,此特性剛好可以完全符合副程式呼叫和迴返的需求。

    舉例說明:如我們要計算 C = a^2 +b^2 以 Forth 程式來完成首先我們會用到堆疊指令。

    DUP (資料疊複製指令 Ex: 3 DUP ‧‧結果 3 3

    SWAP (資料疊交換指令 Ex: 12 SWAP ‧‧結果 1 2

    此程式會為

    : SUM-OF-SQUARE (a b --c) 此為說明資料堆疊之變化

    | | ( (

    | | ( ( 此定義字 (副) 程式之

    開始一個定義 ← ↓結果會放在資料堆疊上

    新定義名字(副程式) (( 需從資料堆疊獲得之參數

    DUP * SWAP DUP * + ; ( 定義字結束或副程式結束

    S0 b b^ a a a^2 a^2+b^2

    S1 b a b^2 a b^2

    S2 b b^2

    所以會得到 C = a^2 +b^2其結果在資料堆疊上。

    此程式SUM-OF-SQUARE我們可以把它視為

    (呼叫DUP副程式,此時會有一個回返地址被放在回返堆疊上,

    Dup結束時用掉此回返地址。

    (再呼叫 * 。

    (再呼叫 SWAP

    (再呼叫 DUP

    (再呼叫 *

    (再呼叫 + 結束

    我們可以將程式重寫成二段式呼叫如下:

    : SQUARED ( n -- n** 2 ) \ 將n變成n**2

    Dup * ;

    : SUM-OF-SQUARES ( a b -- c ) \ 計算c=a**2+b**2

    SQUARED SWAP SQUARED + ;

    此程式 (SUM-OF-QUARES) 運作如下:

    一、呼叫SQUARED (呼叫 Dup ---此時回返堆疊有兩層回返地址

    (呼叫 * ---此時回返堆疊有兩層回返地址

    二、呼叫SWAP-----此時回返堆疊只有一層回返地址

    三、呼叫SQUARED (呼叫 Dup ---此時回返堆疊有兩層回返地址

    (呼叫 * ---此時回返堆疊有兩層回返地址

    如此你應已暸解回返堆疊在Forth語言的作用和重要性,因回返堆疊和程式流程、

    控制權移相當有關係,絕對不可能破壞,否則會有當機的可能性。有一原則要謹守

    --- 盡量少用回返堆疊來做資料轉換。

    一個好的Forth式設計師會努力的把每一個定義字的長度控制在很短的情形下

    (通常只有一行的長度)。並且選一個適當的名稱做為定義字的名字。這會使得

    Forth程式口語化/可讀性的程度大為提高,這是Forth語言極值特色。

    在此提一下金城先生在他的"Forth 的襌思"一書中無上心法第二篇---

    如何在心中建一個電腦"有一段說明他剛學Forth時,也時,日日怨,夜夜愁,

    直到一年後發覺自己在寫程式,口中順口說出的就是程式句子,心中凝想著

    兩個堆疊的上下起伏毫無半點刻意,是下意識的反應。

    這也正說明一個 Forth 的高手他的境界為何?

        程式口語化,對兩個堆疊的變化瞭然於胸毫無半點刻意。

  • 琬庭
    Lv 6
    2 decades ago

    是阿 !!?

  • Anonymous
    2 decades ago

    長毛吉 娃娃≧﹏≦ ( 研究生 5 級 )

    請問:您是活在台灣的嗎?

Still have questions? Get your answers by asking now.