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

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

儘管沒有實現,它被證明為在程式語言開發中非常有影響力的語言,特別是對於函數式程式設計語言,比如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

參照

編輯
  1. ^ Landin, P. J. The Next 700 Programming Languages (PDF). Communications of the ACM (Association for Computing Machinery). March 1966, 9 (3): 157–165 [2021-08-28]. S2CID 13409665. doi:10.1145/365230.365257. (原始內容 (PDF)存檔於2022-03-23). 
  2. ^ Gordon Plotkin英語Gordon Plotkin. Call-by-Name, Call-by Value and the Lambda Calculus (PDF) (報告). 1975 [2020-04-26]. (原始內容 (PDF)存檔於2020-02-01). 
  3. ^ Arthur Evans. PAL: a language designed for teaching programming linguistics. Proceedings ACM National Conference. ACM National Conference. Association for Computing Machinery. 1968. 
    A. Evans. PAL -- A Reference Manual and a Primer (PDF) (報告). Department of Electrical Engineering, Massachusetts Institute of Technology. February 1968 [2021-09-09]. (原始內容 (PDF)存檔於2022-03-06). 
    A. Evans. Appendix 2.1. The Complete Syntax for PAL (PDF) (報告). February 1968 [2021-09-10]. (原始內容 (PDF)存檔於2022-03-06). 
    J. M. Wozencraft, A. Evans. Notes on Programming Linguistics (PDF). M.I.T. Department of Electrical Engineering. 1971 [2021-09-11]. (原始內容 (PDF)存檔於2022-03-06). 
  4. ^ John C. Reynolds英語John C. Reynolds. GEDANKEN: a simple typeless language which permits functional data structures and co-routines (PDF) (報告). Argonne National Laboratory. September 1969 [2021-09-09]. (原始內容 (PDF)存檔於2021-09-09). 
    John C. Reynolds英語John C. Reynolds. Definitional interpreters for higher-order programming languages. ACM '72: Proceedings of the ACM annual conference - Volume. August 1972 [2022-11-19]. doi:10.1145/800194.805852. (原始內容存檔於2022-11-27). 
  5. ^ Ivanović, Mirjana; Budimac, Zoran. A definition of an ISWIM-like language via Scheme. ACM SIGPLAN Notices. April 1993, 28 (4): 29–38. S2CID 14379260. doi:10.1145/152739.152743. 

本條目部分或全部內容出自以GFDL授權發佈的《自由線上電腦詞典》(FOLDOC)。