SWIM — абстрактный язык программирования (или семейство языков программирования) описанное Питером Лэндином (Peter J. Landin) в его статье «Следующие 700 языков программирования» (“The Next 700 Programming Languages”), которая была опубликована в “the Communications of the ACM” в 1966 году. ISWIM расшифровывается как “If you See What I Mean” («если ты видишь, что я имею в виду»).
Несмотря на то, что имплементаций языка, как таковых, не существует, он довольно сильно повлиял на развитие других языков программирования, а именно таких функциональных языков, как SASL, Miranda, ML, Haskell.
ISWIM — императивный язык с функциональным ядром (λ-исчисление с синтаксическим сахаром, для использования изменяемого состояния, присваивания и мощного механизма управления — оператора Лэндина “J”, позволяющего захватывать текущее продолжение (call/cc оператор из Scheme — всего лишь упрощенная версия оператора “J”)). Благодаря λ-исчислению, в ISWIM есть функции высшего порядка и переменные с лексической областью видимости.
Операционная семантика ISWIM определяется SECD (Stack, Environment, Code, Dump) машиной Лэндина и использует вызов по значению, т. е. строгое вычисление. Код на ISWIM должен был выглядеть наиболее похожим на математическую нотацию, вследствие чего Лэндин убрал точку с запятой между утверждениями и блоки begin-end типичные для ALGOL и заменил их областью видимости зависимой от выравнивания.
Особенной чертой в нотации ISWIM является использование where предложений. Программа на ISWIM — это единственное выражение, ограниченное утверждениями where (вспомогательные определения, включающие в себя отношения между переменными), условными выражениями и определениями функций. ISWIM (вместе с CPL) — первый язык, использующий where.
Примечательной семантической чертой была возможность определять новые типы данных, как (потенциально рекурсивную) сумму произведений; для этого использовалось ёмкое описание довольно сходное с естественными языками, по сути равное алгебраическим типам данных в современных функциональных языках. Переменные ISWIM не имели явных объявлений типа, это даёт основание считать (хоть и точно не указано в статье), что Лэндин планировал язык с динамической типизацией, как LISP, а не ALGOL; также возможно было развитие некоторой формы выведения типов.
Как уже упоминалось, ISWIM не имеет прямых реализаций, хотя PAL Арта Эвана (Art Evan) и Gedanken Джона Рейнолда (John Reynold) использовали большинство ключевых концептов Лэндина включая мощные операции передачи управления. Оба эти языка использовали динамическую типизацию. ML Милнера (Milner) можно считать эквивалентным ISWIM без оператора “J”, но с выведением типов.
Другая линия продолжателей ISWIM избавилась от императивных особенностей (присваивания и “J”) приводя, таким образом, к развитию чисто функциональных языков, в следствии с переключением на ленивые вычисления (lazy evaluation). Этим путём пошли SASL, Miranda и Haskell.