Yalnız Mesajı Göster

Cevap : Prolog Örnekleri | Prolog Examples

Eski 04-07-2009   #2
[KAPLAN]
Varsayılan

Cevap : Prolog Örnekleri | Prolog Examples



Lecture 5


Program 51 - pairing items from two lists

/* ************************************************ */
/* */
/* pair/3 */
/* Summary: List 3 is pairs of items from */
/* Lists 1 & 2 */
/* Arg 1: List */
/* Arg 2: List */
/* Arg 3: List */
/* Author: P J Hancox */
/* Date: 29 October 1998 */
/* */
/* ************************************************ */

% 1 - terminating 1
pair([], [Head|Tail], [Head|Tail])
% 2 - terminating 2
pair(List, [], List)
% 3 - recursive
pair([Head1|Tail1], [Head2|Tail2],
['<', Head1, Head2, '>'|Tail3]) :-
pair(Tail1, Tail2, Tail3)


Program 52 - deleting an element from a list - an extension of memb/2 that also inserts an item into a list Also used in Lecture 4


/* ************************************************ */
/* */
/* delete/3 */
/* Summary: Arg 3 is Arg 2 with an instance of */
/* Arg 1 deleted */
/* Arg 1: Term */
/* Arg 2: List */
/* Arg 3: List */
/* Author: P J Hancox */
/* Date: 22 October 1999 */
/* */
/* ************************************************ */

% 1 - terminating
delete(Head, [Head|Tail], Tail)
% 2 - recursive
delete(Item, [Head|Tail], [Head|New_Tail]) :-
delete(Item, Tail, New_Tail)


Program 53 - flattens a list


/* ************************************************ */
/* */
/* flatten/2 */
/* Summary: Arg 2 is Arg 1 with all items */
/* extracted from sublists: eg */
/* | ?-flatten([[a,b],e,[[f]]],R) */
/* R = [a,b,e,f] ? ; */
/* no */
/* Arg 1: List */
/* Arg 2: List */
/* Author: P J Hancox */
/* Date: 29 October 1999 */
/* */
/* ************************************************ */

% 1 - terminating
flatten([], [])
% 2 - recursive
flatten([Item|Tail1], [Item|Tail2]) :-
\+ is_a_list(Item),
flatten(Tail1, Tail2)
% 3 - recursive
flatten([Item|Tail1], List2) :-
is_a_list(Item),
flatten(Item, List1),
flatten(Tail1, Tail2),
app(List1, Tail2, List2)


/* ************************************************ */
/* */
/* app/3 */
/* Summary: True if Arg 3 is Arg 2 appended to */
/* Arg 1 */
/* Arg 1: List */
/* Arg 2: List */
/* Arg 3: List */
/* Author: P J Hancox */
/* Date: 29 October 1999 */
/* */
/* ************************************************ */

% 1 - terminating
app([], List, List)
% 2 - recursive
app([Head|List1], List2, [Head|List3]) :-
app(List1, List2, List3)


/* ************************************************ */
/* */
/* is_a_list/1 */
/* Summary: True if Arg1 is instantiated and a */
/* list */
/* Arg 1: List */
/* Author: P J Hancox */
/* Date: 29 October 1999 */
/* */
/* ************************************************ */

is_a_list(List) :-
nonvar(List),
is_a_list1(List)


/* ************************************************ */
/* */
/* is_a_list1/1 */
/* Summary: True if Arg1 unifies with an empty */
/* list or a list with a head and tail */
/* Arg 1: List */
/* Author: P J Hancox */
/* Date: 29 October 1999 */
/* */
/* ************************************************ */

% 1 - list is empty
is_a_list1([])
% 2 - list has > 0 members
is_a_list1([_|_])

Program 54 - reversing a list - inefficiently


/* ************************************************ */
/* */
/* reverse_naive/2 */
/* Summary: True if Arg2 is Arg 1 in reverse */
/* order */
/* Arg 1: List */
/* Arg 2: List */
/* Author: P J Hancox */
/* Date: 29 October 1999 */
/* */
/* ************************************************ */

% 1 terminating
reverse_naive([], [])
% 2 recursive
reverse_naive([Head|Tail1], Reversed) :-
reverse_naive(Tail1, Tail2),
app(Tail2, [Head], Reversed)

Program 55 - reversing a list - efficiently


/* ************************************************ */
/* */
/* reverse_acc/2 */
/* Summary: True if Arg2 is Arg 1 in reverse */
/* order */
/* Arg 1: List */
/* Arg 2: List */
/* Author: P J Hancox */
/* Date: 29 October 1999 */
/* */
/* ************************************************ */

% 1
reverse_acc(List, Tsil) :-
reverse_acc(List, [], Tsil)
/* ************************************************ */
/* */
/* reverse_acc/3 */
/* Summary: True if Arg3 is Arg 1 in reverse */
/* order */
/* Arg 1: List */
/* Arg 2: List */
/* Arg 3: List */
/* Author: P J Hancox */
/* Date: 29 October 1999 */
/* */
/* ************************************************ */

% 1 terminating condition
reverse_acc([], Reversed, Reversed)
% 2 recursive
reverse_acc([Head|Tail], Rest, Reversed) :-
reverse_acc(Tail, [Head|Rest], Reversed)

Alıntı Yaparak Cevapla