Size: a a a

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

2020 February 01

AK

Azamat Kalimoulline in Clojure — русскоговорящее сообщество
Что именно костыль? Что нельзя определить?
источник

MN

Maksim N in Clojure — русскоговорящее сообщество
Кто нибудь пытался встраивать Racket в динамические либы? Я вот пытаюсь написать плагин для DE в линухе, вроде собрал проект, все окей, в консольку сообщения летят как надо. Но вот теперь возникла проблема - нужно в Racket из C прогинуть объект. Racket собираю при помощи raco ctool --c-mods, если я пытаюсь поменя Scheme_Env из C, то это бесполезно, так как Racket все равно во время комиляции новые символы в своем окружении не видит и выдает unbound identifier
источник

MN

Maksim N in Clojure — русскоговорящее сообщество
Грубо говоря я нашел только способ как написать расширение для Racket, что по сути создаст namespace, а как такое же провернуть при embedding не особо понятно
источник

MN

Maksim N in Clojure — русскоговорящее сообщество
Конечно Racket не Clojure, но может тут есть те, которые и его тыкали
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
Mikhail Borisov
А не только листы и атомы
Ставлю на только листы и атомы. Вектора, сеты, мапы и прочие литерально заданные чудеса - это атомы. Завтра изобретут новые коллекции, добавят в коре, досыпят сахара для литерального задания. И точно так же останутся только листы и атомы
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
Azamat Kalimoulline
defn специальная форма не как отдельный символ, а да, список, который начинается с defn.
простите, но это не специальная форма а простой макрос
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
(macroexpand '(defn f [x] (+ 1 x)))
=> (def f (clojure.core/fn ([x] (+ 1 x))))
источник

AK

Azamat Kalimoulline in Clojure — русскоговорящее сообщество
Andrey Ivanov
простите, но это не специальная форма а простой макрос
Конкретно по defn да, но fn, на котором он базируется - специальная форма.
источник

AK

Azamat Kalimoulline in Clojure — русскоговорящее сообщество
Да и def тоже.
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
как говорили местные гуры, будьте точны в формулировках, нас тут и дети читать могут
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
(macroexpand '(fn [x] (+ 1 x)))
=> (fn* ([x] (+ 1 x)))
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
fn тоже макрос )
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
ради парам-дистракчинга
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
Azamat Kalimoulline
Не переопределила, а определила функцию if. Но дальше пофиг.
if стандартной семантики в строгих языках не может быть функцией. Потому что функция по колл конвеншону вычисляет все свои аргументы перед вычислением своего тела 😋
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
а иф (ака тернарный оператор) просто обязан быть ленивым по второму и третьему аргументу, иначе труба
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
(сорри, я сегодня ни одного кипа не написал и на каток пришел а сеанс отменили....)
источник

AK

Azamat Kalimoulline in Clojure — русскоговорящее сообщество
Andrey Ivanov
if стандартной семантики в строгих языках не может быть функцией. Потому что функция по колл конвеншону вычисляет все свои аргументы перед вычислением своего тела 😋
Тут был вопрос сломает ли рантайм сие действо.
источник

AK

Azamat Kalimoulline in Clojure — русскоговорящее сообщество
Andrey Ivanov
fn тоже макрос )
Ну да. Но ты же идею всё равно понял. Чего к мелочам придираться. :)
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
Да, я сначала среагировал не на то, а потом понял контекст обсуждения. Ну иф не маскируется а + вполне маскируется, так что это такое...
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
Потому что в мелочах сами знаете кто )))
источник