Заменить слова в математическом выражении - 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))))

Объяснение кода листинга программы

В данном коде определён функционал, который позволяет заменить названия функций в математическом выражении на их числовые эквиваленты.

  1. Выражение заменяется на список выражений, которые нужно обработать.
  2. Для каждого выражения в списке выполняется проверка на равенство названия функции «sqrt» (замена на функцию «abs»).
  3. Для каждого выражения в списке выполняется проверка на равенство названия функции «sin» (замена на функцию «cos»).
  4. Если выражение является списком, то рекурсивно вызывается функция «task» для этого списка.
  5. Если выражение не является списком, то оно остаётся без изменений.
  6. Результат обработки каждого выражения в списке присоединяется к результату обработки главного выражения.
  7. Результат обработки выводится на экран. Пример: (task '(+ (sin x) ( (sqrt (+ 6 7 a))))) ==> (+ (COS X) ( (ABS (+ 6 7 A))))

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы