Где я могу получить больше информации о гомоконичности?
Я экспериментировал с функциональным программированием и до сих пор не понимаю эту концепцию. Ребята, знаете ли вы какие-нибудь хорошие книги или учебники или примеры, которые обсуждают эту концепцию? Или, если бы вы могли показать небольшие фрагменты о его использовании, это было бы здорово.
4 ответа
Я считаю, что Почему "Вопросы функционального программирования " Джона Хьюза - одни из лучших.
Изучите шутки или схемы. Язык - это структура данных, это язык. Лисп-код и структуры данных Лисп имеют одинаковые синтаксические правила.
Если вы изучите tcl, вы можете работать с процедурным языком, и правила синтаксиса структуры данных совпадают с правилами синтаксиса языка программирования.
Строго говоря, это не проблема функционального программирования. Это больше проблема с несколькими языками, где синтаксические правила для данных и синтаксические правила для языка одинаковы.
Википедия: http://en.wikipedia.org/wiki/Homoiconic
REBOL - это гомоичный язык. block!
Тип данных в REBOL - это набор квадратных скобок, внутри которых находятся любые допустимые токены REBOL, аналогичные S-выражению в Lisp. Например:
series: [1 2 3 4]
foreach item series [
print item
]
Теперь давайте выразим это немного по-другому:
series: [1 2 3 4]
for-body: [print item] ; This is the body of our foreach
foreach item series for-body
Хотя это было объявлено как данные, мы обработали блок for-body
как код, когда мы передали его foreach
функция. Если мы спросим REBOL, какой тип первого элемента в блоке for-body
является - type? first for-body
- это скажет нам word!
и не function!
(или же native!
или же action!
или любой из других типов функций REBOL). Причина в том, что в качестве данных, for-body
это просто недооцененный кусок слов REBOL. Когда мы передаем это foreach
только тогда он оценивается как код.
Некоторые называют REBOL "как Lisp, но без скобок", и я лично предпочитаю это Lisp, но вы не можете. Тем не менее, это отличный язык для начала, когда вы хотите узнать о гомойконичности, предмет, который я нахожу захватывающим.