Описание тега lisp-macros
1
ответ
Как я могу написать этот макрос Clojure более идиоматически?
(defmacro get-color [color-name] `@(thi.ng.color.core/as-int32 (var-get (resolve (symbol "thi.ng.color.core" (str '~color-name)))))) Мне нравится избегать использования (var-get (resolve (symbol ... (str '~parem)))), Что-то вроде thi.ng.color.core/(…
12 июн '18 в 13:45
2
ответа
Как setf работает под капотом?
В настоящее время изучаю общий язык, следуя Практическому общему лиспу Питера Сейбела (я в главе 11, о коллекциях), мне трудно понять, как setf работает за капотом. Учитывая это выражение: (setf a 10) Я полностью понял, как интерпретатор может (1) п…
22 июн '17 в 11:42
1
ответ
Использование макроса для определения функций, вычисляющих 10 дат, связанных с Пасхой
В настоящее время я изучаю язык с книгой Грэма "ANSI Common Lisp" и в качестве упражнения пишу вычисления календаря на основе юлианского дня. Как вы знаете, пасхальное воскресенье меняется от года к году, и существует еще около 10 специальных дней, …
29 сен '17 в 06:43
0
ответов
Как я могу использовать макрос Emacs, который уже скомпилирован?
Я пытаюсь изменить основной режим Python, чтобы он работал немного по-другому. В частности, я хотел бы изменить python-indent-region. Я считаю, что выяснил, какие изменения мне нужно сделать (для этого нужно изменить строку #1070 на (beginning-of-li…
06 апр '17 в 22:38
1
ответ
Условно убрать let-привязку в макросе lisp
Как я могу условно удалить let-связывание в defun создан в макросе LISP? Здесь я хочу удалить первую переменную let-bound из результирующей функции, но сталкиваюсь с проблемой, когда у меня есть nil которая застревает в привязках let, вызывая ошибку…
23 июл '16 в 21:57
2
ответа
Как можно скомпилировать символы в макросе Pandoric?
Я прочитал раздел 6.7 LOL несколько раз, и я все еще не могу сосредоточиться на следующем. Привязки, которые ранее были закрыты для внешнего кода, теперь широко открыты, чтобы мы могли с ними повозиться, даже если эти привязки были скомпилированы в …
05 мар '17 в 03:54
2
ответа
Elisp: расширение макроса во время загрузки с оценкой неопределенной переменной
Лисп-новобранец здесь. Моя цель состоит в том, чтобы определить макрос, который сделает ключи точечного алиста доступными в качестве переменных для доступа к соответствующим значениям, отсюда и название "let-dotted-alist". Итак, что я хочу, это: (se…
07 сен '16 в 19:38
2
ответа
Разбор строки с макросом
Я пытаюсь оценить вставленное выражение в строке. Некоторые примеры данных для оценки моего кода: (def data {:Location "US-NY-Location1" :Priority 3}) (def qual "(Location = \"US\")") Я хотел бы qual строка, которая будет преобразована во что-то вро…
29 авг '18 в 19:54
1
ответ
Почему макрос оценивается при компиляции определения функции (Clozure Common Lisp)?
Я имею: (defmacro assign (name value) (format t "assigning ~A to ~A~%" `,name `,value)) (defun opcode-call (&rest args) (mapcar (lambda (arg) (if (stringp arg) (let ((var (gensym))) (assign var arg) var) arg)) args)) Когда я компилирую opcode-ca…
15 май '17 в 07:14
2
ответа
Используйте строковую переменную в качестве аргумента макроса
Я хочу этот код: (setq name "foobar") (defun (intern name) ()) сделать то же самое, что и: (defun foobar ()) Я пробовал это (из этого вопроса): (defmacro make-my-function (name) (list 'defun (intern (format "my-%s-function" name)) () (list 'interact…
24 сен '16 в 08:50
2
ответа
Clojure, оценивающий строковую переменную как символ, это использование read-string хорошо?
Я могу использовать memfn для создания функции clojure, которая вызывает функцию Java. (macroexpand '(memfn startsWith prefix)) => (fn* ([target2780 prefix] (. target2780 (startsWith prefix)))) ((memfn startsWith prefix) "abc" "a") => true mem…
29 ноя '18 в 03:12
1
ответ
Создание динамических предложений COND в Common Lisp
Интересно, возможно ли динамически создавать предложения COND из цикла типа (псевдокод): (defvar current-state 1) (defmacro mymacro () (cond `(loop (state . callback) in possible-states do ((eq current-state ,state) (funcall ,callback))))) LOOP буде…
22 фев '19 в 15:21
2
ответа
Макрос со списком макросов в качестве аргумента в Common Lisp
В Common Lisp, как определить "мета-макрос", который принимает в качестве аргумента список макросов (и других аргументов) и компонует эти макросы для получения желаемого кода. Проблема эквивалентна написанию "макроса высшего порядка", который опреде…
08 июн '18 в 06:07
1
ответ
Заменить имя символа в макросе
Как я могу заменить имя символа на функцию, созданную в макросе? Я думаю, что я упускаю что-то очевидное здесь. Например, я пытаюсь сделать макрос, который определяет некоторые переменные и функции, подобные следующим, (cl-defmacro mac (pkg) (let ( …
23 июл '16 в 06:26
0
ответов
Как написать макрос LISP с двойной кавычкой в схеме
Мне нужно написать макрос lisp в схеме (пожалуйста, о гигиенических макросах, синтаксических правилах и т. Д.), У которых будет вызов функции и Alist в качестве аргумента Я хочу, чтобы функция и макрос, которые вызывают эту функцию, имели следующий …
27 май '19 в 21:04
1
ответ
Мой макрос lisp перестает работать в последней версии
У меня есть макрос, который я написал в 2010 году, он был для управления структурами, как в Common Lips, с использованием Alists (здесь весь файл, включая функции https://jcubic.pl/struct.txt). (define-macro (defstruct name . fields) "Macro implemen…
15 апр '19 в 09:24
0
ответов
Как определить функцию в LISP, которая рекурсивно возвращает обратно цитируемый список
У меня есть проблема с макросами в моем интерпретаторе LISP Writtein в JavaScript. проблема в этом коде: (define log (. console "log")) (define (alist->object alist) "(alist->object alist) Function convert alist pairs to JavaScript object." (i…
20 апр '19 в 15:24
1
ответ
Макрос LISP, который обрабатывает переменные и структуру данных внутри во время выполнения
У меня есть LISP, написанный на JavaScript ( https://jcubic.github.io/lips/ с онлайн-демонстрацией, где вы можете попробовать его), и у меня есть макрос, подобный этому: (define-macro (globalize symbol) (let ((obj (--> (. lips 'env) (get symbol))…
25 апр '19 в 20:43
3
ответа
Каков стандартный способ определения глобальных замыканий в схеме?
Поэтому я хочу знать, есть ли стандартный способ иметь такой код: (let ((x 10)) (define (add10 a) (+ x a))) Я знаю о: (define add10 (let ((x 10)) (lambda (a) (+ x a)))) но это не будет работать, если я хочу определить несколько функций, мне нужно зн…
26 апр '19 в 10:16
1
ответ
Как написать расширение макроса в пользовательском LISP в JavaScript
У меня есть общий вопрос, как мне поступить и создать правильную функцию макроэкспанда или макрос. Это определение моего макроса в интерпретаторе LIPS (вы можете проверить его здесь https://jcubic.github.io/lips/) function macro_expand(single) { ret…
13 май '19 в 12:41