Заменить слова в математическом выражении - Lisp
Формулировка задачи:
Заменить в заданном математическом предложении все вхождения sin на cos и sqrt на abs.
Решение задачи: «Заменить слова в математическом выражении»
textual
Листинг программы
- (defun task (aexpr)
- (mapcar (lambda (x)
- (cond ((eq x 'sqrt) 'abs)
- ((eq x 'sin) 'cos)
- ((listp x) (task x))
- (t x))) aexpr))
- ==> TASK
- (task '(+ (sin x) (* (sqrt (+ 6 7 a)))))
- ==> (+ (COS X) (* (ABS (+ 6 7 A))))
Объяснение кода листинга программы
В данном коде определён функционал, который позволяет заменить названия функций в математическом выражении на их числовые эквиваленты.
- Выражение заменяется на список выражений, которые нужно обработать.
- Для каждого выражения в списке выполняется проверка на равенство названия функции «sqrt» (замена на функцию «abs»).
- Для каждого выражения в списке выполняется проверка на равенство названия функции «sin» (замена на функцию «cos»).
- Если выражение является списком, то рекурсивно вызывается функция «task» для этого списка.
- Если выражение не является списком, то оно остаётся без изменений.
- Результат обработки каждого выражения в списке присоединяется к результату обработки главного выражения.
- Результат обработки выводится на экран. Пример: (task '(+ (sin x) ( (sqrt (+ 6 7 a))))) ==> (+ (COS X) ( (ABS (+ 6 7 A))))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д