Я хочу ввести в Common Lisp несколько обычных математических выражений. Например, если я назову вышеуказанный макрос «exp»:
(exp 2 + 3) => 5
(let ((a 2) (b 5) (c 3))
(exp 2 + 3 * a + b - c)) => 10
Следующее может быть трудным, поэтому оно мне не нужно:
(exp 2 + (mod 5 3) + (log 10))
Пожалуйста, скажи мне это.
поиск в Интернете может уже найти несколько вариантов.
Хорошо, я ошибаюсь. Я сделаю несколько поисков в Интернете, прежде чем спрошу об этом.
Вот подсказка с cmu-afix: https://lispcookbook.github.io/cl-cookbook/arrays.html#infix-syntax
писать такие вещи, как:
#i(result[i j] += A[i k] * B[k j])
Есть причина, по которой у lisp нет приоритета оператора, но если вам интересно, есть хорошая простая реализация для него, представленная Дугласом Крокфордом на JS, поэтому вам нужно только его перенести. Удачного взлома!