Любая супер-пупер-объектно-ориентированная система все равно в конечном итоге упирается в алгоритмы, которые могут давать корректные результаты для всех возможных вариантов ввода, но как правило только для какого-то подмножества.
Условно говоря, если на входе у тебя одно 1-байтное целое, то ты можешь провести 256 тестов для всех его возможных значений, после чего со 100% уверенностью гарантировать работу этого алгоритма на данной аппаратной платформе. Но если вдруг случится, что на вход дадут не байт, а слово, либо (в наши дни маловероятный вариант, но все же) запустят на машине с иной длиной байта - твоя гарантия не будет стоить ломаного гроша. Но если ты абстрагируешься от переменных и будешь оперировать только математическими функциями, или, скажем, структурами вроде списков - у тебя есть шанс предъявить для своего алгоритма настоящее доказательство по методу математической индукции. Вот лисп, насколько мне известно, это одна из первых попыток создать нечно подобное.
Т.е. лисп - это образец подхода, где основной упор делается на абстракцию данных а не управляющих структур и подпрограмм. Другими словами, если в случае с Си алгоритм будет корректно работать с любым набором инструкций процессора, однако будет зависеть от четких форматов представления данных, то Лиспу формат данных совершенно по-барабану, но зато есть специфические требования к набору инструкций для нормальной производительности.
Ну, это кому как: предикаты это вам не бип собачий, функции и функционалы как-то понятнее 
Ну, студентам с еще не загаженными окончательно мозгами стараются всего помемножку скармливать, в надежде что вдруг среди них какой-нибудь новый Эйнштейн от информатики родится, который найдет неожиданное применение всему этому

А в реальной практике и функции, и предикаты и все что угодно проще как-то пусть и криво, но реализовать на каком-нибудь из более популярных в индустрии языков.