4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The...
Transcript of 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The...
![Page 1: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/1.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
4A: Introduction to Data Abstraction
CS1101S: Programming Methodology
Low Kok Lim
August 31, 2016
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 2: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/2.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Recap: Assessment Overview
35%: Missions
5%: Discussion group participation
15%: Midterm Assessment (28 Sep, Wed, 10am)
15%: Practical Assessment (10 Nov, Thu, 7pm )
30%: Final Assessment (23 Nov, Wed, 9am)
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 3: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/3.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
1 The Source
2 Data Abstraction
3 Case Study: Rational Numbers
4 Making Lists with Pairs
Reading
SICP 2.1, 2.2.1
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 4: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/4.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Source Week 5Equality
Source Week 5
IdentifiersMath.PI is not really an identifier: The dot plays a peculiar rolein JavaScript. For now, we treat Math.PI as if it were anidentifier.
New functionsSome we will cover today, more on Friday
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 5: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/5.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Source Week 5Equality
Source Week 5
IdentifiersMath.PI is not really an identifier: The dot plays a peculiar rolein JavaScript. For now, we treat Math.PI as if it were anidentifier.
New functionsSome we will cover today, more on Friday
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 6: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/6.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Source Week 5Equality
Types in The Source
Numbers: 1, -5.6, 0.5e-157
Boolean values: true, false
Functions: function(x) { return x + 1; }
Strings: "this is a string"
Today: empty list and pairs
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 7: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/7.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Source Week 5Equality
Types in The Source
Numbers: 1, -5.6, 0.5e-157
Boolean values: true, false
Functions: function(x) { return x + 1; }
Strings: "this is a string"
Today: empty list and pairs
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 8: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/8.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Source Week 5Equality
Equality
We allow === and !== on the following types:
Boolean values — super easy
Strings — straightforward
Numbers — watch out! 3/5 === 2/5 + 1/5
Functions — All function values are created different.
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 9: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/9.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Highest Denomination
function highest_denom(kinds) {if (kinds === 0) { return 0; }else if (kinds === 1) { return 5; }else if (kinds === 2) { return 10; }else if (kinds === 3) { return 20; }else if (kinds === 4) { return 50; }else if (kinds === 5) { return 100; }else { display(’error’); }
}
highest_denom stores six values and retrieves them whenapplied to the proper index.
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 10: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/10.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Highest Denomination
function highest_denom(kinds) {if (kinds === 0) { return 0; }else if (kinds === 1) { return 5; }else if (kinds === 2) { return 10; }else if (kinds === 3) { return 20; }else if (kinds === 4) { return 50; }else if (kinds === 5) { return 100; }else { display(’error’); }
}
highest_denom stores six values and retrieves them whenapplied to the proper index.
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 11: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/11.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Data Structure Example
highest_denom is a data structure.
Create the data structure: Using function definition
function highest_denom(kinds) {...}
Access the data structure: Using function application
... highest_denom(3) ...
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 12: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/12.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Data Structures in Math
They are everywhere: tuples, sets, multisets, etc.
What is the simplest data structure possible?
A pair :Created in math using tuple notation, e.g. (4,3)
Accessed in math using a pattern: Let p be (x , y), for somex and y ... (and now use x and y )
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 13: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/13.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Data Structures in Math
They are everywhere: tuples, sets, multisets, etc.
What is the simplest data structure possible?
A pair :Created in math using tuple notation, e.g. (4,3)
Accessed in math using a pattern: Let p be (x , y), for somex and y ... (and now use x and y )
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 14: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/14.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Data Structures in Math
They are everywhere: tuples, sets, multisets, etc.
What is the simplest data structure possible?
A pair :Created in math using tuple notation, e.g. (4,3)
Accessed in math using a pattern: Let p be (x , y), for somex and y ... (and now use x and y )
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 15: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/15.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Pairs in The Source
function coordinates_4_3(dimension) {if (dimension === "x") {
return 4;} else if (dimension === "y") {
return 3;} else {
return "error";}
}
/* Access: */ ... coordinates_4_3("y") ...
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 16: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/16.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Works, but is it good?
That’s quite good for access, but pretty bad for creating thedata structure.
function coordinates_4_3(dimension) {if (dimension === "x") {
return 4;} else {
return 3;}
}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 17: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/17.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Works, but is it good?
That’s quite good for access, but pretty bad for creating thedata structure.
function coordinates_4_3(dimension) {if (dimension === "x") {
return 4;} else {
return 3;}
}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 18: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/18.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Works, but is it good?
That’s quite good for access, but pretty bad for creating thedata structure.
function coordinates_4_3(dimension) {if (dimension === "x") {
return 4;} else {
return 3;}
}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 19: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/19.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Idea: Abstraction (what else?)
function make_coordinates(x, y) {return function (dimension) {
if (dimension === "x") {return x;
} else {return y;
}};
}
var my_point = make_coordinates(4, 3); // create
... my_point("x") ... // access
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 20: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/20.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Some Renaming
function pair(x, y) {return function (dimension) {
if (dimension === "first") {return x;
} else {return y;
}};
}function first(p) { return p("first"); }function second(p) { return p("second"); }
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 21: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/21.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Alternative Implementation
// make_one_out_of_two from Recitationsfunction pair(x, y) {
return function (select) {return select(x, y);
};}function first(p) {
return p(function(x, y) { return x; });}function second(p) {
return p(function(x, y) { return y; });}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 22: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/22.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Checking is_pair: First Attempt
var tag = function(){ ; }; // created differentfunction pair(x, y) {
return function (select) {return select(x, y, tag); };
}function first(p) {
return p(function(x, y, z) { return x; });}function second(p) {
return p(function(x, y, z) { return y; });}function is_pair(p) {
return p(function(x, y, z) { return z === tag; });}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 23: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/23.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
Checking is_pair: Second Attempt
function pair_lib(fun_name) {var tag = function() { return true; };function pair(x, y) { ...tag... }function first(p) { ... }function second(p) { ... }function is_pair(p) { ...tag... }return (fun_name === "pair") ? pair
: (fun_name === "first") ? first: (fun_name === "second") ? second
: (fun_name === "is_pair") ? is_pair: error("illegal access");
}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 24: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/24.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
How to use pair_lib?
var pair = pair_lib("pair");var first = pair_lib("first");var second = pair_lib("second");var is_pair = pair_lib("is_pair");...var my_pair = pair(1, 2);is_pair(my_pair); // returns true or false?
The flawEvery call of pair lib creates its own tag. The functionspair and is pair become incompatible.
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 25: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/25.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
How to use pair_lib?
var pair = pair_lib("pair");var first = pair_lib("first");var second = pair_lib("second");var is_pair = pair_lib("is_pair");...var my_pair = pair(1, 2);is_pair(my_pair); // returns true or false?
The flawEvery call of pair lib creates its own tag. The functionspair and is pair become incompatible.
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 26: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/26.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
The Correct Version
function make_pair_lib() {var tag = function() { return true; };function pair(x, y) { ... }function first(p) { ... }function second(p) { ... }function is_pair(p) { ... }
return function(fn) {return (fn === "pair") ? pair
: (fn === "first") ? first: (fn === "second") ? second
: (fn === "is_pair") ? is_pair: error("illegal access");
};}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 27: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/27.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationData Structures are “Old Hat”
How to use it?
var pair_lib = make_pair_lib();var pair = pair_lib("pair");var first = pair_lib("first");var second = pair_lib("second");var is_pair = pair_lib("is_pair");...var my_pair = pair(1, 2);is_pair(my_pair); // returns true
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 28: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/28.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Case Study: Rational Numbers
What is a rational number?
A pair, consisting of a denominator and a numerator
function make_rat(n, d) {return pair(n, d);
}function numer(x) {
return first(x);}function denom(x) {
return second(x);}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 29: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/29.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Case Study: Rational Numbers
What is a rational number?A pair, consisting of a denominator and a numerator
function make_rat(n, d) {return pair(n, d);
}function numer(x) {
return first(x);}function denom(x) {
return second(x);}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 30: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/30.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Case Study: Rational Numbers
What is a rational number?A pair, consisting of a denominator and a numerator
function make_rat(n, d) {return pair(n, d);
}function numer(x) {
return first(x);}function denom(x) {
return second(x);}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 31: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/31.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Addition of Rational Numbers
function add_rat(x, y) {return make_rat(numer(x) * denom(y) +
numer(y) * denom(x),denom(x) * denom(y));
}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 32: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/32.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Subtraction of Rational Numbers
function sub_rat(x, y) {return make_rat(numer(x) * denom(y) -
numer(y) * denom(x),denom(x) * denom(y));
}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 33: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/33.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Multiplication and Division
function mul_rat(x, y) {return make_rat(numer(x) * numer(y),
denom(x) * denom(y));}function div_rat(x, y) {
return make_rat(numer(x) * denom(y),denom(x) * numer(y));
}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 34: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/34.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Equality: First Attempt
function equal_rat(x, y) {return numer(x) === numer(y) &&
denom(x) === denom(y);}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 35: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/35.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Equality: Second Attempt
function equal_rat(x, y) {return numer(x) * denom(y) ===
numer(y) * denom(x);}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 36: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/36.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Printing
function rat_to_string(x) {return numer(x) + " / " + denom(x);
}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 37: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/37.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Playing with Rational Numbers
var one_half = make_rat(1, 2);
var one_third = make_rat(1, 3);
rat_to_string(add_rat(one_half, one_third));
rat_to_string(mul_rat(one_half, one_third));
rat_to_string(add_rat(one_third, one_third));
Returns "6 / 9"!
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 38: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/38.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Playing with Rational Numbers
var one_half = make_rat(1, 2);
var one_third = make_rat(1, 3);
rat_to_string(add_rat(one_half, one_third));
rat_to_string(mul_rat(one_half, one_third));
rat_to_string(add_rat(one_third, one_third));
Returns "6 / 9"!
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 39: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/39.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
First Approach: Reduce When Making a Rational
function make_rat(n, d) {var g = gcd(n, d);return pair(n / g, d / g);
}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 40: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/40.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Second Approach: Reduce When Accessing
function make_rat(n, d) {return pair(n, d);
}function numer(x) {
var g = gcd(first(x), second(x));return first(x) / g;
}function denom(x) {
var g = gcd(first(x), second(x));return second(x) / g;
}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 41: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/41.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Third Approach: Reduce When Displaying
function make_rat(n, d) { return pair(n, d); }function numer(x) { return first(x); }function denom(x) { return second(x); }
function rat_to_string(x) {var g = gcd(numer(x), denom(x));return (numer(x) / g) + " / " + (denom(x) / g);
}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 42: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/42.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
Summary of Case Study on Rationals
Pairs can be used to represent rational numbers
Operations are implemented using constructor andaccessor functions
A library hides the internal representation of the data
Implementation details remain invisible to the user of thelibrary
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 43: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/43.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Making Lists with Pairs: Motivation
var highest_denom = pair( pair(50, 20),pair(10, 5) );
What if we want the values except the first?
var highest_denom_2 =pair( second(first(highest_denom),
second(highest_denom) );
// "equal" to pair( 20, pair(10, 5) );
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 44: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/44.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Making Lists with Pairs: Motivation
var highest_denom = pair( pair(50, 20),pair(10, 5) );
What if we want the values except the first?
var highest_denom_2 =pair( second(first(highest_denom),
second(highest_denom) );
// "equal" to pair( 20, pair(10, 5) );
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 45: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/45.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Making Lists with Pairs: Motivation
var highest_denom = pair( pair(50, 20),pair(10, 5) );
What if we want the values except the first?
var highest_denom_2 =pair( second(first(highest_denom),
second(highest_denom) );
// "equal" to pair( 20, pair(10, 5) );
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 46: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/46.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Making Lists with Pairs: Motivation
var highest_denom = pair( pair(50, 20),pair(10, 5) );
What if we want the values except the first?
var highest_denom_2 =pair( second(first(highest_denom),
second(highest_denom) );
// "equal" to pair( 20, pair(10, 5) );
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 47: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/47.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Problem: Removing Next Value Works Differently!
var highest_denom = pair( pair(50, 20),pair(10, 5) );
var highest_denom_2 =pair( second(first(highest_denom)),
second(highest_denom) );
var highest_denom_3 =second(highest_denom_2);
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 48: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/48.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Idea: Introduce Discipline
PrincipleMake sure that first(p) always has the data, andsecond(p) always has the remaining elements.
Example
var highest_denom =pair(50, pair(20, pair(10, 5)));
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 49: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/49.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Idea: Introduce Discipline
PrincipleMake sure that first(p) always has the data, andsecond(p) always has the remaining elements.
Example
var highest_denom =pair(50, pair(20, pair(10, 5)));
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 50: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/50.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Special Case
What if we are at the end?
var highest_denom = pair(10, 5);
Now the program
var rest = second(highest_denom);
gives us a value, not the remaining elements!
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 51: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/51.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Special Case
What if we are at the end?
var highest_denom = pair(10, 5);
Now the program
var rest = second(highest_denom);
gives us a value, not the remaining elements!
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 52: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/52.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Special Case
What if we are at the end?
var highest_denom = pair(10, 5);
Now the program
var rest = second(highest_denom);
gives us a value, not the remaining elements!
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 53: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/53.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Special Case
What if we are at the end?
var highest_denom = pair(10, 5);
Now the program
var rest = second(highest_denom);
gives us a value, not the remaining elements!
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 54: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/54.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Idea: Introduce a Base Case
How to represent the empty list?
It doesn’t really matter!
One wayRecall how tags were represented in the pair library
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 55: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/55.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Idea: Introduce a Base Case
How to represent the empty list?It doesn’t really matter!
One wayRecall how tags were represented in the pair library
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 56: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/56.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Idea: Introduce a Base Case
How to represent the empty list?It doesn’t really matter!
One wayRecall how tags were represented in the pair library
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 57: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/57.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Representing the Empty List
function empty_list() { return true; }
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 58: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/58.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
highest_denom using the Empty List
var highest_denom =pair(50, pair(20, pair(10, pair(5, empty_list))));
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 59: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/59.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
The Same “In Style”
var highest_denom =pair(50,
pair(20,pair(10,
pair(5,empty_list))));
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 60: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/60.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Lists in The Source: Naming
first renamed to head
second renamed to tail
Special symbol for empty_list: the empty box symbol []
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 61: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/61.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
List Discipline in The Source
DefinitionA list is either empty [] or a pair whose tail is a list.
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 62: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/62.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
highest_denom using The Source
var highest_denom = pair(50,pair(20,
pair(10,pair(5, []))));
... head(highest_denom)...
... head(tail(tail(highest_denom)))...
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 63: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/63.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Source Week 5’s List Library
pair(x, y): returns pair made of x and y
is_pair(p): returns true iff p is a pair[]: represents the empty listis_empty_list(xs): returns true iff xs is the emptylisthead(xs): returns the head (first component) of list xstail(xs): returns the tail (second component) of list xslist(x1,...,xn): returns list whose first element is x1,second element is x2, etc. and last element is xn
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 64: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/64.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Printing Pairs in Source IDE Interpreter
pair(x, y) is printed as [x, y]
The empty list is printed as []
Example
pair(1, pair(2, pair(3, [])));
is printed as
[1, [2, [3, []]]]
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 65: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/65.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Error Reporting
The functions that query the structure of lists have expectationsfor their arguments:
head(xs): expects a pair as xs
tail(xs): expects a pair as xs
Otherwise, a nice error message gets printed
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 66: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/66.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Computing the Length of a List
DefinitionThe length of the empty list is 0, and the length of a non-emptylist is one more than the length of its tail.
function length(xs) {if (is_empty_list(xs)) {
return 0;} else {
return 1 + length(tail(xs));}
}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 67: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/67.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Can we do this Iteratively?
function length_iter(xs) {function len(ys, counted_so_far) {
if (is_empty_list(ys)) {return counted_so_far;
} else {return len(tail(ys),
counted_so_far + 1);}
}return len(xs, 0);
}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 68: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/68.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Can we do this Iteratively?
function length_iter(xs) {function len(ys, counted_so_far) {
if (is_empty_list(ys)) {return counted_so_far;
} else {return len(tail(ys),
counted_so_far + 1);}
}return len(xs, 0);
}
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 69: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/69.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Summary
The Source (equality)
Data structures: an old hat, really
Case study: Rational numbers
Lists in Source Week 5
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 70: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/70.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Summary
The Source (equality)
Data structures: an old hat, really
Case study: Rational numbers
Lists in Source Week 5
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 71: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/71.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Summary
The Source (equality)
Data structures: an old hat, really
Case study: Rational numbers
Lists in Source Week 5
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 72: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/72.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Summary
The Source (equality)
Data structures: an old hat, really
Case study: Rational numbers
Lists in Source Week 5
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction
![Page 73: 4A: Introduction to Data Abstraction - NUS Computingcs1101s/samples/slides_04A.view.pdf · The Source Data Abstraction Case Study: Rational Numbers Making Lists with Pairs 4A: Introduction](https://reader034.fdocuments.us/reader034/viewer/2022052407/5ab320077f8b9a7e1d8dff02/html5/thumbnails/73.jpg)
The SourceData Abstraction
Case Study: Rational NumbersMaking Lists with Pairs
MotivationList DisciplineLists in The SourceThe Length of a List
Summary
The Source (equality)
Data structures: an old hat, really
Case study: Rational numbers
Lists in Source Week 5
CS1101S: Programming Methodology 4A: Introduction to Data Abstraction