Accumulators & Difference Lists Accumulators & Difference Lists
York University CSE 3401 Vida Movahedi
York University‐ CSE 3401‐ V. Movahedi
1
06_AccDiff
Accumulators & Difference Lists Accumulators & Difference - - PowerPoint PPT Presentation
Accumulators & Difference Lists Accumulators & Difference Lists York University CSE 3401 Vida Movahedi 1 York University CSE 3401 V. Movahedi 06_AccDiff Overview Overview Accumulators Length of a list Sum of list of
York University‐ CSE 3401‐ V. Movahedi
1
06_AccDiff
York University‐ CSE 3401‐ V. Movahedi
2
06_AccDiff
Example: listlen([a, b, c], 3)
York University‐ CSE 3401‐ V. Movahedi
3
06_AccDiff
York University‐ CSE 3401‐ V. Movahedi
4
06_AccDiff
York University‐ CSE 3401‐ V. Movahedi
5
06_AccDiff
3/ ], 3
York University‐ CSE 3401‐ V. Movahedi
6
06_AccDiff
York University‐ CSE 3401‐ V. Movahedi
7
06_AccDiff
York University‐ CSE 3401‐ V. Movahedi
8
06_AccDiff
York University‐ CSE 3401‐ V. Movahedi
9
06_AccDiff
York University‐ CSE 3401‐ V. Movahedi
10
06_AccDiff
I Fi 1
1 1 1 2 2 invariant(0,1,1,1)
3 6 4 24 5 120 invariant(3,6,4,24)
York University‐ CSE 3401‐ V. Movahedi
11
5 120
06_AccDiff
assembly(bike, [wheel, wheel, frame]). assembly(frame [rearframe frontframe]) assembly(frame, [rearframe, frontframe]). assembly(frontframe, [fork, handle]). .... basicpart(rearframe). bike p ( ) basicpart(fork). .... bike wheel frame hub gears axle spoke rim frontframe fork handle rearframe
York University‐ CSE 3401‐ V. Movahedi
12
bolt nut
06_AccDiff
partsof(X, [X]):‐ basicpart(X). partsof(X, P):‐ assembly(X, Subparts), partsofList(Subparts,P). t fLi t([] []) partsofList([], []). partsofList([Head|Tail], P) :‐ partsof(Head, Headparts), partsofList(Tail, Tailparts), append(Headparts Tailparts P) append(Headparts, Tailparts, P).
York University‐ CSE 3401‐ V. Movahedi
13
06_AccDiff
partsof(X, P) :‐ partsacc(X, [], P). partsacc(X A [X|A]) :‐ basicpart(X) partsacc(X, A, [X|A]) :‐ basicpart(X). partsacc(X, A, P):‐ assembly(X, Subparts), partsacclist(Subparts, A, P). partsacclist([], A, A). partsacclist([H|Tail] A P):‐ partsacc(H A Headparts) partsacclist(Tail partsacclist([H|Tail], A, P):‐ partsacc(H, A, Headparts), partsacclist(Tail, Headparts, P).
results in list P.
York University‐ CSE 3401‐ V. Movahedi
14
06_AccDiff
partsof(X, [X]):‐ basicpart(X). partsof(X, P):‐ assembly(X, Subparts), partsofList(Subparts,P). partsofList([], []). partsofList([Head|Tail], P) :‐ partsof(Head, Headparts), partsofList(Tail, Tailparts), append(Headparts, Tailparts, P). partsof(X, P) :‐ partsacc(X, [], P). partsacc(X, A, [X|A]) :‐ basicpart(X). partsacc(X, A, P):‐ assembly(X, Subparts), partsacclist(Subparts, A, P). partsacclist([], A, A). partsacclist([H|Tail], A, P):‐ partsacc(H, A, Headparts), partsacclist(Tail, Headparts, P).
York University‐ CSE 3401‐ V. Movahedi
15
06_AccDiff
York University‐ CSE 3401‐ V. Movahedi
16
06_AccDiff
partsof(X, P) :‐ partsdif(X, [], P). partsdif(X, Hole, [X|Hole]) :‐ basicpart(X). partsdif(X Hole P):‐ assembly(X Subparts) partsdif(X, Hole, P): assembly(X, Subparts), partsdiflist(Subparts, Hole, P). partsdiflist([], Hole, Hole). t difli t([H|T il] H l P) t dif(H H l 1 P) partsdiflist([H|Tail], Hole, P):‐ partsdif(H, Hole1, P), partsdiflist(Tail, Hole, Hole1).
York University‐ CSE 3401‐ V. Movahedi
17
06_AccDiff
partsof(X, P) :‐ partsacc(X, [], P). partsacc(X, A, [X|A]) :‐ basicpart(X). partsacc(X, A, P):‐ assembly(X, Subparts), partsacclist(Subparts, A, P). partsacclist([], A, A). partsacclist([], A, A). partsacclist([H|Tail], A, P):‐ partsacc(H, A, Headparts), partsacclist(Tail, Headparts, P). partsof(X, P) :‐ partsdif(X, [], P). partsdif(X, Hole, [X|Hole]) :‐ basicpart(X). partsdif(X, Hole, P):‐ assembly(X, Subparts), partsdiflist(Subparts, Hole, P). p ( ) y( p ) p ( p ) partsdiflist([], Hole, Hole). partsdiflist([H|Tail], Hole, P):‐ partsdif(H, Hole1, P), partsdiflist(Tail Hole Hole1) partsdiflist(Tail, Hole, Hole1).
York University‐ CSE 3401‐ V. Movahedi
18
06_AccDiff
York University‐ CSE 3401‐ V. Movahedi
19
06_AccDiff
York University‐ CSE 3401‐ V. Movahedi
20
06_AccDiff
The name comes from list differences: e a e co es
e e ces [a,b,c,d,e] – [d,e] = [a,b,c] [a,b,c|X]‐ X = [a,b,c]
– The empty list is represented by X‐X – [a,b,c] is represented by [a,b,c|X]‐X
York University‐ CSE 3401‐ V. Movahedi
21
06_AccDiff
York University‐ CSE 3401‐ V. Movahedi
22
06_AccDiff
York University‐ CSE 3401‐ V. Movahedi
23
06_AccDiff