Определить функцию, которая возвращает копию этой строки - Lisp
Формулировка задачи:
Решение задачи: «Определить функцию, которая возвращает копию этой строки»
- (defun punctuation-marks (s
- p
- &aux
- (v '(#\. #\, #\: #\; #\! #\? #\-))
- (n (position-if
- #'(lambda (a) (member a v))
- s
- :from-end t))
- (u (subseq s 0 n))
- (z (subseq s n)))
- (concatenate 'string
- (substitute-if
- p
- #'(lambda (a) (member a v))
- u)
- z))
- > (punctuation-marks "abra: ca, dabra!" #\?)
- "abra? ca? dabra!"
- > (punctuation-marks "abra: ca, da! bra" #\?)
- "abra? ca? da! bra"
Объяснение кода листинга программы
В этом коде определена функция punctuation-marks
, которая принимает три аргумента: строку s
, в которой ищется пунктуация, символ p
, который указывает, какие знаки препинания нужно найти, и aux
, который не используется в этой функции.
Сначала создаются две переменные: v
, содержащая список знаков препинания, и n
, содержащая позицию первого найденного знака препинания в строке s
.
Затем создаются две другие переменные: u
, содержащая подстроку s
от начала до позиции n
, и z
, содержащую подстроку s
от позиции n
до конца.
Далее, с помощью функции concatenate
, создается новая строка, в которую вставляются все символы из u
, за которыми следует символ p
, а затем все символы из z
.
Наконец, новая строка возвращается в качестве результата.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д