Определить функцию, которая возвращает копию этой строки - Lisp

Узнай цену своей работы

Формулировка задачи:

Дана строка текста. Определить функцию, которая возвращает копию этой строки, в которой все знаки препинания кроме последнего заменены на вопросительный знак. Последний знак препинания остаётся без изменения. Например: если дано "Привет, Мир! Вот и я!", ответом будет "Привет? Мир? Вот и я!".

Решение задачи: «Определить функцию, которая возвращает копию этой строки»

textual
Листинг программы
  1. (defun punctuation-marks (s
  2.                           p
  3.                           &aux
  4.                           (v  '(#\. #\, #\: #\; #\! #\? #\-))
  5.                           (n (position-if
  6.                               #'(lambda (a) (member a v))
  7.                               s
  8.                               :from-end t))
  9.                           (u (subseq s 0 n))
  10.                           (z (subseq s n)))
  11.   (concatenate 'string
  12.                (substitute-if
  13.                 p
  14.                 #'(lambda (a) (member a v))
  15.                 u)
  16.                z))
  17.  
  18. > (punctuation-marks "abra: ca, dabra!" #\?)
  19. "abra? ca? dabra!"
  20. > (punctuation-marks "abra: ca, da! bra" #\?)
  21. "abra? ca? da! bra"

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

В этом коде определена функция punctuation-marks, которая принимает три аргумента: строку s, в которой ищется пунктуация, символ p, который указывает, какие знаки препинания нужно найти, и aux, который не используется в этой функции. Сначала создаются две переменные: v, содержащая список знаков препинания, и n, содержащая позицию первого найденного знака препинания в строке s. Затем создаются две другие переменные: u, содержащая подстроку s от начала до позиции n, и z, содержащую подстроку s от позиции n до конца. Далее, с помощью функции concatenate, создается новая строка, в которую вставляются все символы из u, за которыми следует символ p, а затем все символы из z. Наконец, новая строка возвращается в качестве результата.

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


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

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

14   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы