ISWIM(如下首字母縮寫「If you See What I Mean」),是的一種抽象的電腦程式語言(或程式語言家族),由Peter J. Landin設計,並描述在他1966年於ACM通訊發表的文章《The Next 700 Programming Languages》之中[1]

Quick Facts 編程範型, 設計者 ...
ISWIM
編程範型指令式, 函數式
設計者Peter J. Landin
釋出時間1966年,​58年前​(1966
啟發語言
ALGOL 60, Lisp
影響語言
ML, SASL, Lucid
Close

儘管沒有實現,它被證明為在程式語言開發中非常有影響力的語言,特別是對於函數式程式設計語言,比如MLSASLMirandaHaskell和它們的後繼者,還有數據流程編程語言如Lucid

設計

ISWIM具有由加了語法糖的lambda演算構成的函數式核心,它是增加了可變變數和賦值的指令式語言,並具有Landin的強力控制機制J算子英語J operator,它能夠擷取當前的續體Schemecall/cc英語call-with-current-continuation算子有與之類似的功能)。因為基於了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英語John C. Reynolds的Gedanken[4],取得了Landin的多數概念,包括強力的控制轉移操作。這兩者都是動態型別的。MilnerML,可以被認為等價於沒有J算子,而有類型推論的ISWIM。

從ISWIM衍生出的另一條路線,是去掉指令式特徵(賦值和J算子)而留下純函數式語言[5]。接着就有可能切換到惰性求值。這條路線導致了SASLKRCHopeMirandaHaskellClean

參照

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.