В обычном, как императивном, так и функциональном программировании вся программа по большому счету сводится к огромному числу равенств x = ..., где слева стоит переменная, а справа — выражение, зависящее от переменных. А языки программирования предоставляют синтаксический сахар, что бы записать это множество как можно более компактно. Это уже почти уравнения, только тривиальные.
Некоторые сложности обнаруживаются в ленивых языках:
fib = 1:1:(zipWith (+) fib (tail fib))
Здесь fib присутствует и в левой и в правой части, то есть мы получаем полноценное уравнение, решением которого будет бесконечная последовательность чисел Фибоначчи. Так как на бесконечных последовательностях естественным образом определяется топология, Haskell может решить это уравнение методом проcтых итераций (через оператор неподвижной точки).
Еще дальше по пути уравнений пошел Prolog. Каждый предикат определяет уравнение на множествах, хоть и записывается без знака равенства. Решаются такие уравнения почти перебором и возможность использовать в них арифметику сильно ограничена.
Но есть язык, в котором уравнения являются важнейшей частью — это Modelica.
model Point
Real x,y;
equation
end Point;
model Line
parameter Real len;
Point p1,p2;
equation
len = (p1.x-p2.x)^2 + (p1.y-p2.y)^2;
end Line;
Здесь отрезок определяется как координаты концов и длинна, при этом длина и координаты связаны очевидным уравнением.
(К сожалению, source такого языка не знает, а вставить раскрашенный pygment-ом html не получается.)
Читать полностью »