Где я могу получить больше информации о гомоконичности?

Я экспериментировал с функциональным программированием и до сих пор не понимаю эту концепцию. Ребята, знаете ли вы какие-нибудь хорошие книги или учебники или примеры, которые обсуждают эту концепцию? Или, если бы вы могли показать небольшие фрагменты о его использовании, это было бы здорово.

4 ответа

Решение

Изучите шутки или схемы. Язык - это структура данных, это язык. Лисп-код и структуры данных Лисп имеют одинаковые синтаксические правила.

Если вы изучите tcl, вы можете работать с процедурным языком, и правила синтаксиса структуры данных совпадают с правилами синтаксиса языка программирования.

Строго говоря, это не проблема функционального программирования. Это больше проблема с несколькими языками, где синтаксические правила для данных и синтаксические правила для языка одинаковы.

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, но вы не можете. Тем не менее, это отличный язык для начала, когда вы хотите узнать о гомойконичности, предмет, который я нахожу захватывающим.

Другие вопросы по тегам