Скачать презентацию Chapter 7 List Operator Representation of a Скачать презентацию Chapter 7 List Operator Representation of a

2520060858d19a5f0c017dd20b63b0ec.ppt

  • Количество слайдов: 24

Chapter 7 List Operator Chapter 7 List Operator

Representation of a database 1. Tuple facts 2. Attribute facts 3. List of structures Representation of a database 1. Tuple facts 2. Attribute facts 3. List of structures 344 -302 LP and Prolog 2 Chapter 7

NO 1 ? employee 1(N, 100, P, S). 1. Tuple facts N = brain NO 1 ? employee 1(N, 100, P, S). 1. Tuple facts N = brain P = operator S = 20000 N = nancy P = manager S = 50000 ü asserting each tuple as a facts /* Name Dept Position Salary */ employee 1(brain, 100, operator, 20000) employee 1(john, 200, manager, 50000) employee 1(nancy, 100, manager, 50000) 344 -302 LP and Prolog 3 Chapter 7

EX 07 EX 01 NO 1 ? print_countries. predicates english country(symbol) print_countries france clauses EX 07 EX 01 NO 1 ? print_countries. predicates english country(symbol) print_countries france clauses germany country(england). denmark country(france). country(germany). country(denmark). print_countries : - country(X), write(X), /* write the value of X */ nl, /* start a new line */ fail. print_countries. 344 -302 LP and Prolog 4 Chapter 7

2. Attribute facts ü asserting each attribute as a facts ü attributes can be 2. Attribute facts ü asserting each attribute as a facts ü attributes can be brought together NO 1 as rule department(brain, 100). department(nancy, 100). position(brain, operator). position(nancy, manager). salary(brain, 20000). salary(nancy, 50000). ? employee 2(N, 100, P, S). N = brain P = operator S = 20000 employee 2(Name, Dept, Pos, Sal) : - department(Name, Dept), position(Name, Pos), salary(Name, Sal). 344 -302 LP and Prolog 5 N = nancy P = manager S = 50000 Chapter 7

FACTEX 02. pro domains thing = book(title, author) ; car(name); shoes author = author(firstname, FACTEX 02. pro domains thing = book(title, author) ; car(name); shoes author = author(firstname, lastname) person, title, name, firstname, lastname, shoes = symbol predicates ownes(person, thing) clauses ownes(siri, book("AI book", author(tom, brook))). ownes(siri, car(honda)). ownes(siri, shoes). goal ownes(X, Y), write(X, “ owns “, Y, "n "), fail. 344 -302 LP and Prolog 6 Chapter 7

LIST List : simple data structure L = [man, woman, boy, girl] L = LIST List : simple data structure L = [man, woman, boy, girl] L = [a, b, c] L = [Head|Tail] L = [a|Tail] Tail = [b, c] L = [a, b, c]= [a|[b, c]] = [a, b|[c]] domains name = symbol anylist = name* 344 -302 LP and Prolog 7 Chapter 7

LISTEX 02. pro : print list forward domains name = symbol anylist = name* LISTEX 02. pro : print list forward domains name = symbol anylist = name* print_list([cat, dog, bird, chicken]) cat dog bird chicken predicates print_list(anylist) clauses print_list([]). print_list([H|T]) : - write(" "), write(H, " n"), print_list(T). 344 -302 LP and Prolog 8 Chapter 7

LISTEX 03. pro : print list reverse domains print_list_rev([cat, dog, bird, chicken]) name = LISTEX 03. pro : print list reverse domains print_list_rev([cat, dog, bird, chicken]) name = symbol anylist = name* chicken bird predicates dog print_list_rev(anylist) cat clauses print_list_rev([]). print_list_rev([H|T]) : - print_list_rev(T), write(" "), write(H, " n"). 344 -302 LP and Prolog 9 Chapter 7

EX 08 EX 01 Write a list domains list = integer* list = symbol* EX 08 EX 01 Write a list domains list = integer* list = symbol* /* or whatever type you wish to use */ predicates write_a_list(list) 1 2 clauses write_a_list([]). predicates man write_a_list(list) woman clauses 3 write_a_list([]). /* If the list is empty, do nothing more. . . */ girl boy nothing more. . . . */ write_a_list([H|T]) : - /* Match the head to H and the tail to T, then. . . */ the tail to T, then. . . . */ write(H), nl, write_a_list(T). goal write_a_list([1, 2, 3]). write_a_list([man, woman, girl, boy]). 344 -302 LP and Prolog 10 Chapter 7

reverse. pro Write a list in reverse order domains 3 list = integer* /* reverse. pro Write a list in reverse order domains 3 list = integer* /* or whatever type you wish to use */ 2 1 predicates write_reverse_list(list) clauses write_reverse_list([]). /* If the list is empty, do nothing more. */ write_reverse_list([H|T]) : /* Match the head to H and the tail to T, then. . . */ write_reverse_list(T), nl, write(H). goal write_reverse_list([1, 2, 3]). 344 -302 LP and Prolog 11 Chapter 7

EX 08 EX 06 Member name = symbol = สมาชก namelist = name* = EX 08 EX 06 Member name = symbol = สมาชก namelist = name* = list domains namelist = name* name = symbol NO 1 predicates ? is_a_member_of(man, [woman, boy]) is_a_member_of(name, namelist) Yes clauses is_a_member_of(Name, [Name|_]). /****/ is_a_member_of(Name, [_|Tail]) - is_a_member_of(Name, Tail). : /****/ 344 -302 LP and Prolog 12 Chapter 7

LISTEX 04. pro : check member domains namelist = name* name = symbol member(bird, LISTEX 04. pro : check member domains namelist = name* name = symbol member(bird, [cat, do g, bird, chicken]) yes predicates member(name, namelist) member(rose, [cat, dog, b ird, chicken]) clauses member(Name, [Name|_]). /* find the member in the list */ member(Name, [_|Tail]) : - member(Name, Tail). 344 -302 LP and Prolog 13 no Chapter 7

findword. pro : find the word in the list domains namelist = NO 1 findword. pro : find the word in the list domains namelist = NO 1 name* ? findword(house, [cat, is, in, the, house]) name = symbol predicates findword(name, namelist) house is in the list. NO 2 ? findword(dog, [cat, is, in, the, house]) dog not found. clauses findword(Name, []): - write(Name), write(“ not found. ”), nl. /*1*/ findword(Name, [Name, _]): - write(Name), write(“ is in the list. ”), nl. /*2*/ findword(Name, [_|Tail]) : - findword(Name, Tail). 344 -302 LP and Prolog 14 /*3*/ Chapter 7

NO 1 3. List of structures ? one_tuple_1(e(N, 100, P, S), [e(brain, 100, operator, NO 1 3. List of structures ? one_tuple_1(e(N, 100, P, S), [e(brain, 100, operator, 20000), e(john, 200, manager, 50000), e(nancy, 100, manager, 50000)]) ü asserting a stream of tuples in a LIST Structure /* Name Dept Position Salary */ [e(brain, 100, operator, 20000), e(john, 200, manager, 50000), e(nancy, 100, manager, 50000)] one_tuple_1(e(N, D, P, S), [e(N, D, P, S)|Tail]). /*1*/ N = brain P = operator S = 20000 N = nancy P = manager S = 50000 one_tuple_1(e(N, D, P, S), [e(_, _, _, _)|Tail]) : - one_tuple_1(e(N, D, P, S), Tail). /*2*/ 344 -302 LP and Prolog 15 Chapter 7

LISTEX 05. pro : check member predicate domains thing = book(title, author) namelist = LISTEX 05. pro : check member predicate domains thing = book(title, author) namelist = thing* title, author = symbol predicates member(thing, namelist) clauses member(Name, [Name|_]). /* find the member in the list */ member(Name, [_|Tail]) : - member(Name, Tail). /* member(book(tiger, jonh), [book(cat, jim), book(tiger, john), book(bird, jane)]). */ 344 -302 LP and Prolog 16 Chapter 7

EX 08 EX 02 Find length of list domains list = NO 1. ? EX 08 EX 02 Find length of list domains list = NO 1. ? Length_of([1, 2, 5, 6, 7], What) integer* predicates What = 5 length_of(list, integer) NO 2. clauses length_of([], 0). length_of([_|T], ? length_of([122, 123, 111], 9) /*…. */ L) : - No length_of(T, Tail. Length), L = Tail. Length + 1. 344 -302 LP and Prolog 17 Chapter 7

EX 08 EX 07 Append NO 1 domains integerlist = integer* ? append ([1], EX 08 EX 07 Append NO 1 domains integerlist = integer* ? append ([1], [2, 3, 4], What) What = [1, 2, 3, 4] predicates append(integerlist, integerlist) NO 2 ? append ([1, 2, 3], [4, 5, 6, 7], What) What = [1, 2, 3, 4, 5, 6, 7] clauses append([], List). append([X|L 1], List 2, [X|L 3]) : - append(L 1, List 2, L 3). 344 -302 LP and Prolog ใสคาใน List 2 L 1 เอาไวหนา แลวเกบไวท 18 L 3 Chapter 7

EX 08 Find average domains name, address = string age = integer list = EX 08 Find average domains name, address = string age = integer list = age* L = keep age list Sum= sum all ages N = list length of L Ave = average value predicate person(name, address, age) sumlist(list, age, integer) goal findall(Age, person(_, _, Age), L), sumlist(L, Sum, N), Ave = Sum/N, write("Average =", Ave), nl. clauses sumlist([], 0, 0). /****/ sumlist([H|T], Sum, N) : - sumlist(T, S 1, N 1), Sum = H +S 1, N =1+N 1. /****/ person("Sherlock Holmes", "22 B Baker Street", 42). person("Pete Spiers", "Apt. 22, 21 st Street", 36). person("Mary Darrow", "Suite 2, Omega Home", 51). 344 -302 LP and Prolog 19 Chapter 7

EX 12 EX 08. PRO : Read Integer into the list domains list = EX 12 EX 08. PRO : Read Integer into the list domains list = integer* predicates readlist(list) goal makewindow(1, 7, 7, " Integer List ", 5, 5, 15, 70), write(" Type in a column of integers, like this: ", "nn integer (press ENTER)n", " etc. nn Type X (and press ENTER) to end the list. nn"), readlist(The. List), write("n. The Turbo Prolog list is: ", The. List). clauses readlist([H|T]) : write("16 "), /* This prints the prompt symbol */ readint(H), !, readlist(T). readlist([]). 344 -302 LP and Prolog 20 Chapter 7

EX 13 EX 01 NEW. PRO : Write Character list domains charlist = char* EX 13 EX 01 NEW. PRO : Write Character list domains charlist = char* predicates string_chlist(string, charlist) clauses string_chlist("", []). string_chlist(S, [H|T]) : frontchar(S, H, S 1), write(" * ", H, " * n "), string_chlist(S 1, T). 344 -302 LP and Prolog 21 Chapter 7

EX 12 EX 02. PRO : Writelist domains integerlist = integer* predicates writelist(integerlist) write EX 12 EX 02. PRO : Writelist domains integerlist = integer* predicates writelist(integerlist) write 5(integerlist, integer) clauses writelist(NL ) : - nl, write 5(NL, 0 ), nl. write 5(TL, 5 ) : - !, nl, write 5(TL, 0). write 5([H|T], N ) : - !, write(H, " "), N 1=N+1, write 5(T, N 1). write 5([], _ ). 344 -302 LP and Prolog 22 Chapter 7

LAB 5 1) จงเขยนโปรแกรมภาษาโป รลอก เพอแสดงวา เลขจำนวนเตม 2 จำนวนหารลงตวหรอไม ถาหารลงตวใหแสดงผลลพธวา Have solution ถาหารไมลงตวใหแสดงผลลพธวา No LAB 5 1) จงเขยนโปรแกรมภาษาโป รลอก เพอแสดงวา เลขจำนวนเตม 2 จำนวนหารลงตวหรอไม ถาหารลงตวใหแสดงผลลพธวา Have solution ถาหารไมลงตวใหแสดงผลลพธวา No solution พรอมทงยกตวอยางประกอบแสดงผลการทำงา นดวย 2) จงเขยนโปรแกรมภาษาโป รลอก เพอหาคาเฉล ยของเลขจำนวนจรง 3 จำนวน พรอมทงยกตวอยางประกอบแสดงผลการทำงา นดวย สงทตองสง 344 -302 LP and Prolog 23 Chapter 7

344 -302 LP and Prolog 24 Chapter 7 344 -302 LP and Prolog 24 Chapter 7