ISWIM

ISWIM は、Peter J. Landin が考案し、1966年の Communications of the ACM 誌で発表した The Next 700 Programming Languages で初めて明らかにした抽象プログラミング言語（あるいはプログラミング言語ファミリ）である。名称は "If you See What I Mean" の頭字語に由来する。

実装されたことはないが、その後のプログラミング言語の開発に多大な影響を与えた。特に、SASL、Miranda、ML、Haskellといった関数型言語に影響を与えている。

ISWIM は、ラムダ計算の関数型コアを命令型言語の糖衣構文で包んだものである。変更可能な変数と代入と強力な制御機構として Landin の J 演算子を追加してある（J演算子は継続を可能としたもので、Scheme の call/cc は J 演算子を簡略化したものである）。ラムダ計算に基づいており、高階関数と静的スコープの変数を備えている。

ISWIM の操作的意味論は Landin のSECDマシンを使って定義されており、先行評価（eager evaluation）による値渡しを使っている。ISWIM の目標は、より数学的記法に近づけることであったため、Landin は ALGOL の文の区切りであったセミコロンや begin と end によるブロックを排除し、オフサイドルールによって字下げでブロックを示すようにした。

ISWIM で特徴的な記法として、節（clause）の利用がある。ISWIM プログラムは、'where' 節を使った1つの式（変数間の等式を含む補助的定義）、条件付きの式、関数定義からなる。ISWIM は、CPLと共に最初に 'where' 節を使ったプログラミング言語の1つであった。

意味論的特徴としては、既存のデータ型を組み合わせて（場合によっては再帰的に）新たなデータ型を定義可能であったことが挙げられる。これはやや冗長な自然言語的なスタイルであったが、最近の関数型言語にある代数的データ型と同じものである。ISWIM では、変数の型は明示的に宣言されず、Landin は（1966年の論文では明記していないが）動的型付けのようなものを想定していたと思われる（ALGOLよりもむしろLISPに近い）。もちろん、彼が何らかの型推論を開発することを思い描いていたとも考えられる。

ISWIM をそのまま実装する試みはなされなかったが、Art Evan の PAL や John Reynold の Gedanken は Landin の J 演算子を含む概念に影響されている。これらはどちらも動的型付けであった。Milner の ML は ISWIM から J 演算子を省いて、型推論を追加したものと評される。またLandinは参考文献に自身の、SECDマシンを示した"The Mechanical Evaluation of Expression"を載せている。

ISWIM から影響を受けた別の系統として、命令型の機能（代入や J 演算子）を省いた純粋関数型言語がある。この系統は遅延評価への切り替えが可能となっている。例えば、SASL、Miranda、Haskell がその系統にあたる。

 参考文献 
 P. J. Landin The Next 700 Programming Languages. CACM 9(3):157–65, March 1966.
 Art Evans. PAL — a language designed for teaching programming linguistics. Proceedings ACM National Conference 1968.
 J. C. Reynolds. GEDANKEN: a simple typeless language which permits functional data structures and co-routines. Argonne National Laboratory September 1969.
 Mirjana Ivanović, Zoran Budimac. A definition of an ISWIM-like language via Scheme. ACM SIGPLAN Notices, Volume 28, No. 4 April 1993.

Category:関数型プログラミング言語
Category:プログラミング言語