Задачи на Arity Prolog

Тема в разделе "Другие задачи", создана пользователем Dzhambolet, 3 ноя 2010.

Статус темы:
Закрыта.
  1. Dzhambolet

    Dzhambolet Гость

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

    Dzhambolet Гость

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

    Dzhambolet Гость

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

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

    Dzhambolet Гость

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

    Dzhambolet Гость

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

    Dzhambolet Гость

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

    Dzhambolet Гость

    Если получится перевести, размещу :KillMe:
     
  8. Dzhambolet

    Dzhambolet Гость

    А вот и вторая задача(задержался - интернета не было):
    Код (Text):
    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).
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей