ISWIM(如下首字母縮寫「If you See What I Mean」),是的一種抽象的計算機編程語言(或編程語言家族),由Peter J. Landin設計,並描述在他1966年於ACM通訊發表的文章《The Next 700 Programming Languages》之中[1]。
儘管沒有實現,它被證明為在編程語言開發中非常有影響力的語言,特別是對於函數式編程語言,比如ML、SASL、Miranda、Haskell和它們的後繼者,還有數據流程編程語言如Lucid。
設計
ISWIM具有由加了語法糖的lambda演算構成的函數式核心,它是增加了可變變量和賦值的指令式語言,並具有Landin的強力控制機制J算子,它能夠捕獲當前的續體(Scheme的call/cc算子有與之類似的功能)。因為基於了lambda演算,ISWIM具有高階函數和詞法作用域變量。
ISWIM的操作語義,使用Landin的SECD抽象機來定義,並且使用了傳值調用,因而是及早求值的[2]。ISWIM的目標之一,就是要看起來更像數學表示,所以Landin放棄了ALGOL的語句間分號,和begin...end
塊結構,並把它們替代為越位規則,和基於縮進的轄域。
ISWIM在表示法上的特色,是使用了where
子句。ISWIM程序是一個單一表達式,它由where
子句(包括變量間等式的輔助定義)、條件表達式和函數定義所量化。與CPL一起,ISWIM是最早使用where
子句的語言之一。
ISWIM的顯著的語義特徵,是有能力將新數據類型,定義為(可能遞歸的)乘積之和。這是使用稍顯冗餘的自然語言風格描述來完成的,但是除了表示法之外,完全等同於現代函數式語言中代數數據類型。ISWIM變量沒有明確的類型聲明,儘管在1966年論文中沒有明確的說出來,Landin好像希望這個語言是動態類型的,像LISP而不像ALGOL;但是也有可能他想要開發某種形式的類型推論。
實現和派生
沒有進行過直接實現ISWIM的嘗試,但Arthur Evans的PAL[3],和John C. Reynolds的Gedanken[4],獲取了Landin的多數概念,包括強力的控制轉移操作。這兩者都是動態類型的。Milner的ML,可以被認為等價於沒有J算子,而有類型推論的ISWIM。
從ISWIM衍生出的另一條路線,是去掉指令式特徵(賦值和J算子)而留下純函數式語言[5]。接着就有可能切換到惰性求值。這條路線導致了SASL、KRC、Hope、Miranda、Haskell、Clean。
引用
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.