Вставка элемента в список после последнего вхождения указанного на Прологе


Добавил:DMT
Дата создания:17 января 2008, 16:43
Дата обновления:17 января 2008, 16:43
Просмотров:5317 последний 13 апреля, 14:49
Комментариев: 0
Вставка элемента в список после последнего вхождения указанного на Прологе
Код на Lisp
  1. domains
  2. str=string
  3. strp=str*
  4. predicates
  5. revers(strp,strp,strp)
  6. /* инверсия списка(вспомогательный предикат)
  7. - аккумулятор
  8. - исходный список
  9. - получаемый список */
  10. insert(str,str,strp,strp)
  11. /* вставка элемента в список перед первым вхождением указанного
  12. - вставляемый элемент
  13. - элемент перед которым происходит вставка
  14. - исходный список
  15. - измененный список
  16. */
  17. clauses
  18. revers(Y, [], Y).
  19. revers(X1, [Z|X2], Y):-
  20. revers([Z|X1], X2, Y).
  21. insert(_, _, [], []):-
  22. !.
  23. insert(X, Y, [Y|Z], [X, Y|Z]):-
  24. !.
  25. insert(X, Y, [H|Z], [H|N]):-
  26. insert(X, Y, Z, N).
  27. goal
  28. Ls=["2", "3", "5", "3", "5"],
  29. revers([], Ls, Ls1),
  30. insert("1", "3", Ls1, Ls2),
  31. revers([], Ls2, Ls3).
  32.  
При использовании обязательна ссылка на http://DMTSoft.ru
up