2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 пролог - сортировка списка
Сообщение19.01.2008, 02:40 
передо мной встала нетривиальная задача:надо сделать сортировку списка методом вставки, задача казалось бы простая, если делать её с 2мя предикатами,а надо с 1м!!!Весь мозг сломал=( помогите плиз!!!

 
 
 
 
Сообщение19.01.2008, 23:44 
ins_sort([ ],[ ]).
ins_sort([H|T],L):–ins_sort(T,T_Sort),insert(H,T_Sort,L).
insert(X,[],[X]).
insert(X,[H|T],[H|T1]):–X>H,!,insert(X,T,T1).
insert(X,T,[X|T]).

вот код с 2мя предикатами

 
 
 
 
Сообщение23.01.2008, 01:44 
Тут оба предиката рекурсивные. Если бы хоть один был без рекурсии, то слить их в один было бы тривиально. А так, боюсь, дело не в Прологе, а просто надо придумать какой-то другой алгоритм, чтобы содержал одну процедуру. У меня что-то пока не выходит :(

 
 
 
 
Сообщение04.02.2008, 03:08 
Вот что придумал (Turbo Prolog 2.0):

Код:
CONSTANTS
spisok=[3,1,0,-1,2,1]

DOMAINS
int=integer   
list = integer*

PREDICATES
ins_sort(int,int,list,list)

CLAUSES
ins_sort(0,0,[ ],[ ]).
ins_sort(0,0,[H|T],L):-
   ins_sort(0,0,T,T_Sort),
   ins_sort(1,H,T_Sort,L).
ins_sort(1,X,[],[X]).
ins_sort(1,X,[H|T],[H|T1]):-
   X>H,!,
   ins_sort(1,X,T,T1).
ins_sort(1,X,T,[X|T]).

GOAL
ins_sort(0,0,spisok,X), write(X).


Извращение, конечно :)

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group