Поклонникам Бейсика:
А вот на Лиспе (не только Авто-, а на любом Лиспе) можно сделать так:
(set 'a '((op x y) (op (op x x) x (op y y) y)))
(a + 3.1 4.7)
Результатом будет (x + x) + x + (y + y) + y = 23.4 :)
А по сути, список-данные был обработан списком-программой, да ещё при этом символ операции сложения, знак +, был передан в качестве параметра ! Это так же красиво и мощно, как в профессиональных растровых редакторах (например, Фотошоп) возможность маскировать пикселы растра другим же растром (каналом маски).
А ещё в Лиспе много функций для функционального программирования, которых нет, не было и никогда не будет в Бейсике.
Вот пример работы функции (read):
(set (read "varname") 8.99)
В результате в именном пространстве Лиспа появится символ varname, которому присвоено число 8.99 ! Для тех, кто в танке: имя переменной (а можно и функции) можно динамически сформировать во время исполнения программы, а не только во время написания её текста, как в Бейсике. Тело функции (что-то вроде "((op x y) (op (op x x) x (op y y) y))" из первого примера) можно тоже сфабриковать чисто программно в виде строковой переменной и преобразовать функцией (read) в символы (то есть, по сути, интерпретировать нужный кусок кода по своей воле !).
Вот, смотрите:
(set 'a (read "((op x y) (op (op x x) x (op y y) y))"))
(a + 3.1 4.7)
А теперь, знатоки Бейсика, внимание, вопрос: что есть в Бейсике такого, чего в принципе нет в Лиспе ?