Все дело в контроле.
Может быть, начать с более низкого уровня. Аппликативная система - это просто система, в которой объекты могут быть применены к другим объектам. Простым примером аппликативной системы является bash.
ls | Больше
Можно предположить, что они находятся в некоторой среде, и что вышеуказанные средства влияют на окружающую среду, а затем делают больше. В аппликативной записи это
больше @ (ls @ environment)
Тем не менее, можно сделать более сложные вещи, такие как
ls | шаблон grep | Больше
Так что теперь в аппликативной записи это
больше @ ((grep @ pattern) @ (ls @ environment)).
Обратите внимание на grep @ pattern. Grep применяется к шаблону, который возвращает программу для соответствия этому шаблону в результате ls. Это точка приложения, чтобы применить программу к аргументам, создавая новые программы из «атомарных» (или встроенных) программ. Однако мы не можем делать слишком много программирования только с помощью простого приложения или встроенных функций. Нам нужен способ структурирования нашего ввода и применения наших примитивов к нашему вводу.
Вот тут и начинается лямбда. Используя лямбду, можно обобщить
(grep @ pattern)
Чтобы применить grep к любому входу,
(grep @ X)
Однако у нас должен быть способ получить входные данные для grep. Таким образом мы обычно используем функции.
f (X) = grep @ X
Вышеуказанный процесс называется абстрагированием аргумента. Но нет причин думать, что имя f является особенным, поэтому у нас есть синтаксис:
лямбда х. grep @ X
Затем лямбда X. grep @ X, может быть применена ко входу, и ввод будет подставлен в тело и оценен. Однако замена может привести к путанице, связанные переменные могут быть проблематичными для реализации на машине. S-K-I (или B, C, K, W) дает возможность делать лямбда-элементы без подстановки, а просто обмениваться приложениями.
Напомним, что приложение - это то, что нужно. Очень удобно рассуждать на уровне применения программы к чему-либо (возможно, к другой программе). Лямбда-исчисление дает возможность структурировать ввод и применение программ к аргументам. ЛЫЖ дает способ делать лямбда без явной замены.
Следует отметить, что сокращение SKI по своей природе лениво, поэтому, возможно, необходимо учитывать некоторые аспекты в реальном использовании SKI для структурирования приложений. Действительно, теперь аргументы могли быть полностью оценены, а также могут быть частичным применением. Обойти это можно с помощью теории типов, и только оценивая программу на ее входе, если программа находится в главном положении приложения. То есть, если кто-то пишет с закрытыми лямбда-терминами, переведенными в SKI,
тогда если
p @ arg1 @ ....
Должно быть так, что если p - примитивная программа, то перезапись завершена, и поэтому все ее аргументы 1) доступны, 2) полностью оценены. Тем не менее, я не доказал это, и это может быть не так с достаточно сильной теорией типов ...