Где я могу получить больше информации о гомойконичности? - PullRequest
1 голос
/ 05 мая 2009

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

Ответы [ 4 ]

4 голосов
/ 05 мая 2009

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

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

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

2 голосов
/ 06 мая 2009
1 голос
/ 08 марта 2011

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

1 голос
/ 06 мая 2009
...