Разделить список из строк на два: в один поместить строки, состоящие из одной буквы, в другой – все остальные - Prolog

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

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

Разделить список из строк на два: в один поместить строки, состоящие из одной буквы, в другой – все остальные.

Решение задачи: «Разделить список из строк на два: в один поместить строки, состоящие из одной буквы, в другой – все остальные»

textual
Листинг программы
domains
str=string
strl=str*
 
predicates
len(str,integer)
task(strl,strl,strl)
 
clauses
 
len("",0).
len(X,L) :- frontchar(X,_,X1), len(X1,L1), L=L1+1.
 
task([],[],[]).
task([H|T],[H|R1],R) :- len(H,1), task(T,R1,R).
task([H|T],R1,[H|R]) :- len(H,L), L<>1, task(T,R1,R).

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

В коде присутствуют следующие элементы:

  1. Область определения (domains) - здесь объявлены два домена: str - строка (string) и strl - строка, состоящая из любых символов (str*).
  2. Область предикатов (predicates) - здесь объявлены два предиката: len - принимает два аргумента: строку и целое число (integer), и возвращает истину, если длина строки равна указанному числу, иначе возвращает ложь.
  3. Область правил (clauses) - здесь находятся три правила:
    • len(``,0). - здесь определяется длина пустой строки равной 0.
    • len(X,L) :- frontchar(X,,X1), len(X1,L1), L=L1+1. - это рекурсивный вызов функции len, который разбивает строку X на две части: X1 - первый символ и - все остальные символы. Затем вызывается функция len для X1 и L1, и к результату добавляется единица, так как счетчик проходит по всем символам строки.
    • task([],[],[]). - это базовый случай, когда все три списка пустые, тогда задача решена.
    • task([H|T],[H|R1],R) :- len(H,1), task(T,R1,R). - это рекурсивный вызов функции task, который передает первый символ H и два новых списка R1 и R. Функция len возвращает единицу, так как первый символ - это отдельная строка.
    • task([H|T],R1,[H|R]) :- len(H,L), L<>1, task(T,R1,R). - это рекурсивный вызов функции task, который передает первый символ H и два новых списка R1 и R. Функция len возвращает число L, которое не равно единице, то есть длина строки больше одного символа.

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


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

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

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