Часто идут темы насчет программирования на естественном языке, что сильно упрощало бы чтение и написание программ, вот 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