Size: a a a

Clojure — русскоговорящее сообщество

2020 January 30

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
Anton Chikin
cljs.user> (= '(+ 1 1) '(+ 1 1))
true
cljs.user> (= #(+ 1 1) #(+ 1 1))
false
В common lisp'е тоже будет такое же поведение. Он тоже не гомоиконный?
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Упоролись
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Vyacheslav Mikushev
В common lisp'е тоже будет такое же поведение. Он тоже не гомоиконный?
Думаю нет.
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Anton Chikin
Код это не данные
код это данные, все синтаксические конструкции выражены структурами данных самого языка, макрос система работает с ними. внутреннее представление скомпилированного кода тут не при чем
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
Anton Chikin
Думаю нет.
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Andrew Rudenko
код это данные, все синтаксические конструкции выражены структурами данных самого языка, макрос система работает с ними. внутреннее представление скомпилированного кода тут не при чем
ой ли
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Т.е. ты хочешь сказать что (fn [x y]) - параметры тут это вектор?
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
да
источник

AK

Azamat Kalimoulline in Clojure — русскоговорящее сообщество
Anton Chikin
Т.е. ты хочешь сказать что (fn [x y]) - параметры тут это вектор?
Да
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Чтобы почувствовать гомоиконность, достаточно попробовать написать интерпретатор языка на самом языке
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Попробуй сделать это на джсе и на лиспе и почувствуй разницу
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
И станет понятно, почему на джсе никогда даже близко не будет макросов лиспа)
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
(eval '(+ 1 2)), eval("1 + 2"). Так пойдет?:)
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Vyacheslav Mikushev
(eval '(+ 1 2)), eval("1 + 2"). Так пойдет?:)
Это мне?
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Я предлагаю написать функцию eval для джса и для лиспа)
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
Ну да.:) Юмор.
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
А если очень хочется в кложуре код поковырять, можно вот что сделать:

(def square-code '(fn [x] (* x x)))
(def square (eval square-code))


Теперь можешь поманипулировать AST своей функции)
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Функция square при этом, конечно, не изменится
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Можно бомбануть себе макрос, который вместе с функцией будет сохранять и ее AST
источник