Пролог, операторная запись и программирование на естественном языке

May 21, 2010 10:04

Часто идут темы насчет программирования на естественном языке, что сильно упрощало бы чтение и написание программ, вот Prolog (Edinburgh style)  мне и понравился в первую очередь такой возможностью которой на мой взгляд нет в других языках (был известный пример на FORTH с "нога ружье прострелить" но это немного не то) и которую программист может по желанию  вводить в свои разработки посредством определения новых операторов. Ниже привожу работающий пример из книги Братко описывающий слияние списков и удаление элемента из списка

:-op(100,xfx,in).
:-op(300,fx,concatenating).
:-op(200,xfx,gives).
:-op(100,xfx,and).
:-op(300,fx,deleting).
:-op(100,xfx,from).

Item in [Item | List].
Item in [First | Rest] :- Item in Rest.

concatenating [] and List gives List.
concatenating [X | L1] and L2 gives [X | L3] :- concatenating L1 and L2 gives L3.

deleting Item from [Item | Rest] gives Rest.
deleting Item from [First | Rest] gives [First | NewRest] :- deleting Item from Rest gives NewRest.

?-concatenating [1,2,3] and [4,5,6] gives X, deleting 5 from X gives Y.
yes
X=[1,2,3,4,5,6]
Y=[1,2,3,4,6]
Next solution?;
no

prolog, программерское

Previous post Next post
Up