Найти слова, которые есть в первом предложении, но отсутствуют во втором - Lisp
Формулировка задачи:
Найти все слова, которые есть в первом предложении и отсутствуют во втором.
Решение задачи: «Найти слова, которые есть в первом предложении, но отсутствуют во втором»
textual
Листинг программы
(defun word-set-difference (a b) (mapcar #'string (set-difference (string-list a) (string-list b)))) (defun string-list (s) (read-from-string (concatenate 'string "(" (delete-if-not #'(lambda (x) (or (alpha-char-p x) (equal x #\space) (equal x #\-))) s) ")"))) > (word-set-difference "aa b-b cc" "cc dd") ("AA" "B-B")
Объяснение кода листинга программы
В данном коде реализован алгоритм нахождения множества слов, которые присутствуют в первом предложении, но отсутствуют во втором.
В функции word-set-difference
происходит следующее:
- Создается функция
string
, которая преобразует каждый элемент списка в строку. - Применяется функция
mapcar
к списку слов первого предложения, преобразуя каждый элемент в строку. - Вычисляется разница между множеством слов первого предложения и второго предложения с помощью функции
set-difference
. - Результатом является список слов, которые присутствуют в первом предложении, но отсутствуют во втором.
В функции
string-list
происходит следующее: - Используется функция
read-from-string
, чтобы прочитать строку из символа, следующего за последним символом в строке. - Формируется строка, содержащая все слова в предложении, разделенные пробелами.
- Используется функция
delete-if-not
, чтобы удалить все символы, которые не являются буквами или пробелами. - Результатом является список слов.
Таким образом, код принимает два предложения в качестве входных данных и возвращает список слов, которые присутствуют только в первом предложении. В приведенном примере результатом является список слов
AA
иB-B
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д