# ISWIM

Paradigm functional, imperative Peter J. Landin 1966 None Lisp, ALGOL 60 Sasl, ML

ISWIM (abbr. for "If You See What I Mean") is an influential but unimplemented abstract computer programming language (or family of languages) described in the article by Peter J. Landin "The Next 700 Programming Languages" in 1966.

## Characteristics

ISWIM is an imperative language with a functional core, consisting of a syntactic sugaring of lambda calculus to which are added mutable variables and assignment and a powerful control mechanism — the J operator. Being based on lambda calculus ISWIM has higher order functions and lexically scoped variables.

New in language:

• J-operator
• Off-side rule
• λ-calculus-based language
• where- and let-clauses

Influenced on: SASL, Miranda, ML, Haskell.

### Concept

ISWIM is ‘a family of languages, of which each member is the result of choosing a set of primitives’. The rationale of this was considering a programming language as a system of two layers: a basic set of primitives and a set of combinaton facilities which ‘describe things in terms of other things’. Thus a family of languages is supposed to be defined by specifying the latter set, while the former determines a particular language's problem orientation. As textual appearance, ISWIM programs are very close to the usual writing style of mathematics. Local definitions are being introduced through where- and let-clauses, and nesting is expressed by use of indentation (off-side-rule). All these make the textual appearance of ISWIM programs be very close to the usual writing style of mathematics.

A notationally distinctive feature of ISWIM is its use of where clauses. An ISWIM program is a single expression qualified by "where" clauses (auxiliary definitions including equations among variables), conditional expressions and function definitions. Along with CPL, ISWIM was one of the first programming languages to use "where" clauses. New data types could be defined as a (possibly recursive) sum of products like the algebraic data types found in modern functional languages. ISWIM variables were probably dynamically typed but Landin may have planned some form of type inference. Concepts from ISWIM appear in Art Evan's PAL and John Reynold's Gedanken, Milner's ML and purely functional languages with lazy evaluation like SASL, Miranda and Haskell.

### Comparison with Lisp

First, ISWIM is a λ-calculus-based language, which Lisp was not (at that time, Lisp had dynamic rather than lexical scoping). Second, ISWIM has no inherent commitment to lists – neither as a preferred form of data structuring nor as one in which the program is represented.

## Code examples

Since the language has never been implemented, examples are from the original article are provided:

   Print the x such that x^2 - x - 6 = 0 /\ x >= 0

   Print f(1, -1, 6)
where f(a, b, c) = the x such that ax^2 + bx + c = 0 /\ x >= 0