ISWIM

ISWIM（如下首字母缩写“If you See What I Mean”），是的一种抽象的计算机编程语言（或编程语言家族），由Peter J. Landin设计，并描述在他1966年于ACM通讯发表的文章《The Next 700 Programming Languages》之中。

尽管没有实现，它被证明为在编程语言开发中非常有影响力的语言，特别是对于函数式编程语言，比如ML、SASL、Miranda、Haskell和它们的后继者，还有数据流程编程语言如Lucid。

设计
ISWIM具有由加了语法糖的lambda演算构成的函数式核心，它是增加了可变变量和赋值的指令式语言，并具有Landin的强力控制机制，它能够捕获当前的续体（Scheme的算子有与之类似的功能）。因为基于了lambda演算，ISWIM具有高阶函数和词法作用域变量。

ISWIM的操作语义，使用Landin的SECD抽象机来定义，并且使用了传值调用，因而是及早求值的。ISWIM的目标之一，就是要看起来更像数学表示，所以Landin放弃了ALGOL的语句间分号，和begin...end块结构，并把它们替代为越位规则，和基于缩进的辖域。

ISWIM在表示法上的特色，是使用了where子句。ISWIM程序是一个单一表达式，它由where子句（包括变量间等式的辅助定义）、条件表达式和函数定义所量化。与CPL一起，ISWIM是最早使用where子句的语言之一。

ISWIM的显著的语义特征，是有能力将新数据类型，定义为（可能递归的）乘积之和。这是使用稍显冗余的自然语言风格描述来完成的，但是除了表示法之外，完全等同于现代函数式语言中代数数据类型。ISWIM变量没有明确的类型声明，尽管在1966年论文中没有明确的说出来，Landin好像希望这个语言是动态类型的，像LISP而不像ALGOL；但是也有可能他想要开发某种形式的类型推论。

实现和派生
没有进行过直接实现ISWIM的尝试，但Arthur Evans的PAL，和的Gedanken，获取了Landin的多数概念，包括强力的控制转移操作。这两者都是动态类型的。Milner的ML，可以被认为等价于没有J算子，而有类型推论的ISWIM。

从ISWIM衍生出的另一条路线，是去掉指令式特征（赋值和J算子）而留下纯函数式语言。接着就有可能切换到惰性求值。这条路线导致了SASL、KRC、Hope、Miranda、Haskell、Clean。

 引用 

Category:学术的编程语言
Category:函数式编程语言
Category:1966年建立的程式語言