Проверить слово на палиндром и почти палиндром - Lisp
Формулировка задачи:
Нужно проверить слово на палиндром и почти палиндром.
например:
КАЗАК - палиндром
МЕЧОМ - почти палиндром
Решение задачи: «Проверить слово на палиндром и почти палиндром»
textual
Листинг программы
: palindrome-distance ( str -- n ) halves reverse swap dup length [ = [ 1 - ] when ] 2reduce ; { "kazak" "me4om" "arozaupalanalapuazora" "cyberforum" } [ palindrome-distance ] each --- Data stack: 0 1 0 5
Объяснение кода листинга программы
- Функция
palindrome-distance
принимает строку в качестве аргумента и возвращает целое число. - Внутри функции создаются следующие переменные:
halves
содержит половину строки (первую половину).reversed
содержит строку, перевернутую относительноhalves
.swap
содержит две половины строки, перевернутые относительно друг друга.dup
содержит исходную строку.length
содержит длину строки.
- С помощью цикла
when
проверяется, является ли строка палиндромом:- Если строка палиндром, то в цикл
when
помещается 1, иначе 0.
- Если строка палиндром, то в цикл
- Переменная
n
уменьшается на 1 в каждой итерации циклаwhen
, пока не станет равной 0. - В конце функции возвращается значение
n
. - В примере кода вызывается функция
palindrome-distance
для списка строк:kazak
me4om
arozaupalanalapuazora
cyberforum
- Каждой строке из списка присваивается значение, возвращаемое функцией
palindrome-distance
. - Значения помещаются в стек данных.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д