Задачи на Arity Prolog

  • Автор темы Dzhambolet
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

Dzhambolet

#1
2 задачи:
1)Написать программу разделения списка на два таким образом, чтобы нечетные(по номеру) элементы были в первом, четные - во втором;
2)Создать предикат, меняющий местами первую и последнюю буквы в каждом слове исходной строки.
 
D

Dzhambolet

#2
1-ю задачу добил, только вторая осталась на повестке
Слово - подстрока строки, не содержащая пробелов
Пример работы предиката, который нужно получить во второй задаче:
?-pred($ abcd 345 de$,S).
S=$dbca 543 ed$.
То есть в исходной строке возможно произвольное количество пробелов в любом месте.В ответ на запрос выдается строка со словами, отделёнными отлько одним пробелом
 
D

Dzhambolet

#3
Хорошо.Приму любую помощь.
Вот код первой задачи:

Код:
divide([],[],[]).
divide([A],[A],[]).
divide([X,Y|L],[X|L1],[Y|L2]):-divide(L,L1,L2).
L1 - список с элементами, стоящими на нечётных позициях в исходном списке;
L2 - список с элементами, стоящими на чётных позициях в исходном списке.
 
D

Dzhambolet

#4
str_char
frontchar- Что представляют собой эти две функции?
 
D

Dzhambolet

#5
Завершится ли процедура, если не выполнится функция str_char?Или она всегда выполняется?Немного непонятно.
 
D

Dzhambolet

#6
Спасибо.Теперь занимаюсь таким извращением, как перевод этого кода в Arity
 
D

Dzhambolet

#8
А вот и вторая задача(задержался - интернета не было):
Код:
del_space($$,$$):-!.
del_space(S,S1):-
list_text(L,S),
L=[X|L1],
X=32,list_text(L1,S2),del_space(S2,S1).
del_space(S,S1):-S1=S.

swap($$,$$):-!.
swap(S,S1):-
string_length(S,L),
L=1,
S1=S,!.
swap(S,S1):-
string_length(S,L),
L1 is L-1,
L2 is L-2,
substring(S,0,1,S2),
substring(S,L1,1,S3),
substring(S,1,L2,S4),
concat(S3,S4,S5),
concat(S5,S2,S1).

first_wd($$,$$,$$,[]):-!.
first_wd(S,F,R,A):-
del_space(S,S1),
string_search($ $,S1,N),
substring(S1,0,N,F),
swap(F,F2),
A=[F2,$ $|A1],!,
string_length(S1,L),
L1 is L-N-1,
N1 is N+1,
substring(S1,N1,L1,R),
first_wd(R,F1,R1,A1).
first_wd(S,F,R,A):-swap(S,S1),A=[S1|[]].

ans([],$$):-!.
ans(L,S):-concat(L,S).

final(S,S1):-first_wd(S,_,_,A),ans(A,S1).
 
Статус
Закрыто для дальнейших ответов.