cs1101s lecture 14: environment model & mutable data 10 october 2012
TRANSCRIPT
![Page 1: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/1.jpg)
CS1101S Lecture 14:
Environment Model & Mutable Data
CS1101S Lecture 14:
Environment Model & Mutable Data
10 October 2012
![Page 2: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/2.jpg)
Midterm survey closes today
Midterm survey closes today
![Page 3: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/3.jpg)
Winner announcement of ‘Force Crystals’
and‘Alien Pancakes’:
Lecture 16, 17/10
Winner announcement of ‘Force Crystals’
and‘Alien Pancakes’:
Lecture 16, 17/10
![Page 4: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/4.jpg)
JavaScript Buddy Scheme
JavaScript Buddy Scheme
![Page 5: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/5.jpg)
Re-MidtermRe-Midterm16 Oct 2012 (Tues)
7:30 pm, venue: TBC
![Page 6: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/6.jpg)
Recap: Last LectureRecap: Last Lecture
• Introduced assignment: v = E;• By introducing state and
assignment, the Revised Substitution Model (RSM) is broken
• Today, we need to learn how to cope with this new environment
![Page 7: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/7.jpg)
Assignment statementAssignment statement<name> = <new-value>;
• <name> is a symbol, not evaluated.• <new-value> is evaluated, then its value
is assigned to the variable <name> in the environment.
• That is, from now on, <name> will evaluate to <new-value>
• Compare with expression statement <value-1> === <value-2>;
![Page 8: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/8.jpg)
Today’s AgendaToday’s Agenda
• Environment Model• Mutable Data
– Mutating lists
– Queues
– Tables
![Page 9: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/9.jpg)
Environment ModelEnvironment Model
• RSM doesn’t work anymore!• An Environment
– determines the context in which an expression should be evaluated
– Every expression HAS an environment in which is evaluated. If none is created by the user, then the expression is evaluated in the Global Environment.
![Page 10: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/10.jpg)
Environment ModelEnvironment ModelThe Global Environment consists of a single frame with bindings of function variables to their implementation.
alert:
prompt:
pair:
list:
impl
impl
impl
impl
globalenvironment
![Page 11: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/11.jpg)
Environment ManipulationEnvironment Manipulation
• Every function stores the bindings of its global variables in its environment
• Every function call extends this environment by a binding
– of the parameter variables to the actual arguments, and
– of the local variables to undefined
![Page 12: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/12.jpg)
Environment ExtensionEnvironment Extension
• So far, we have not spent much time worrying about how environments are extended
• In the presence of assignment, we need to be clear about this
![Page 13: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/13.jpg)
Environment ModelEnvironment Model
• An environment is a sequence of frames.
• Each frame contains bindings of symbols and values.
• A frame points to its enclosing environment, the next one in the sequence.
• Extending an environment means adding a new frame inside the old one.
![Page 14: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/14.jpg)
Accessing EnvironmentsAccessing Environments
• To evaluate a symbol, look up its value in the current frame.
• If not found in current frame, then look in enclosing environment, and so on.
![Page 15: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/15.jpg)
ExampleExample
• A, B, C, D are environments (C same as D)• Value of x in environment A is:• Value of x in environment B is: • x in Frame II shadows x in Frame I• Value of w in environment A?
Frame Ix:3y:5
Frame IIz:6x:7
Frame IIIm:1y:2
A B
C D
7
3
unbound
![Page 16: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/16.jpg)
Evaluation RulesEvaluation Rules
• To evaluate an application:
fun(arg1,arg2,…,argn)–Evaluate the subexpressions of the
application in the current environment.
–Apply the value of the function subexpression to the values of the argument subexpressions.
![Page 17: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/17.jpg)
Evaluation RulesEvaluation Rules• Var declarations: var <name> = <exp>;
– Applying enclosing function def extends function environment by binding of <name>
• Variable occurrence <name> searches environment from current frame
• Assignment statement: <name> = <exp>;– searches environment for <name> from current
frame, changes its binding to value of <exp>
![Page 18: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/18.jpg)
ExampleExample
• Access x in A leads to 3
• Evaluate x = 13; in B
Frame Ix:3y:5
Frame IIz:6w:7v:8
Frame IIIm:1y:2
A B
C D
13
![Page 19: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/19.jpg)
More rulesMore rules• Function expression: function(<var1>,<var2>,..){ <body> }– Creates a function object, represented as two
circles.– One points to the code (text).– The other points to the environment in which
the function expression was evaluated; called the closing environment.
– A function therefore remembers the environment in which it was created.
![Page 20: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/20.jpg)
Function applicationFunction application• Create a new frame that points to the
closing environment of the function.• In this new frame, bind the formal
parameters to the actual arguments.• Bind variables declared with var to undefined
• Then evaluate the body of the function in this new frame.
![Page 21: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/21.jpg)
JavaScript toplevelJavaScript toplevel• Variable declaration outside any function: var <name> = <expr>;– Evaluate <expr> in global environment– If <name> is not defined in global environment,
define it, and bind it to undefined– Change binding of <name> to eval result
• Function definition outside any function:function <name>(args) { <body> } similar to
var <name> = function(args){<body>};
![Page 22: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/22.jpg)
ExampleExample
• After evaluating function square(x) { return x * x; } in the global environment.
other variables…
square:
global env
parameters: xbody: return x * x;
![Page 23: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/23.jpg)
ExampleExample
• Now, evaluate square(5) in the global env.
• Create new frame that points to square’s closing environment.
• In this frame, bind x to 5, evaluate x*x;
other bindings…
square:
global env
parameters: xbody: return x * x;
x: 5E1
x * x
![Page 24: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/24.jpg)
Example 2 (from last lecture)Example 2 (from last lecture)function make_withdraw(balance) { return function(amount) { if (balance >= amount) { balance = balance – amount; return balance; } else { return “error”; } } }
var W1 = make_withdraw(100);W1(50) 50W1(60) “error”W1(40) 10
![Page 25: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/25.jpg)
Example 2 (from last lecture)Example 2 (from last lecture)
• After defining procedure make_withdraw
other bindings…
make_withdraw:
global env
parameters: balancebody: return function ... ...
![Page 26: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/26.jpg)
Example 2Example 2Let’s evaluate W1 = make_withdraw(100);
make_withdraw: global env
parameters: balancebody: return function …
balance: 100
Evaluate this:Evaluate this:
return function(amount){return function(amount){ if (balance >= amount) … if (balance >= amount) …
}}
![Page 27: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/27.jpg)
Example 2Example 2Let’s evaluate W1 = make_withdraw(100);
make_withdraw: global env
parameters: balancebody: return fucnction…
parameters: amount
body: if (balance >= amount) …if (balance >= amount) …
balance: 100
W1:
![Page 28: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/28.jpg)
Example 2Example 2Evaluating W1(50)
make_withdraw: . . .
W1:
global env
parameters: amountbody: if …)if …)
balance: 100
amount: 50
if (balance >= amount) {if (balance >= amount) { balance = balance – amount;balance = balance – amount; return balance;return balance;} else {} else { return “error”; }return “error”; }
assignment is assignment is about to change about to change balance here.balance here.
50
![Page 29: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/29.jpg)
Example 2Example 2
Environment after evaluating W1(50)
make_withdraw: . . .
W1:
global env
parameters: amountbody: if …if …
balance: 50
![Page 30: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/30.jpg)
Example 2Example 2
Environment after evaluating var W2 = make_withdraw(100)
W2 has its own state variable.
make-withdraw: . . .
W1: W2:
global env
parameters: amountbody: if …if …
balance: 50
balance: 100
parameters: amountbody: if …if …
![Page 31: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/31.jpg)
Mutable DataMutable Data• Assignment gives us the ability to
create mutable data, i.e. data that can be modified.– e.g. bank account
• In SICP Chap. 2, all our data were immutable. We had– Constructors, selectors, predicates, printers
– But no mutators.
![Page 32: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/32.jpg)
Mutable DataMutable Data
After creating a pair with pair, the head and tail can be changed using set_head and set_tail
![Page 33: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/33.jpg)
Mutable DataMutable Data
• set_head(p, x) changes head pointer of p to point to x.
• set_tail(p, y) changes tail pointer of p to point to y.
![Page 34: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/34.jpg)
Initially, x, y are as shown.
Effect of:set_head(x, y)
ExampleExample
dc
ba
x
fe
ydc
ba
x
fe
y
![Page 35: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/35.jpg)
ExampleExample
Effect of:set_tail(x, y)
Initially, x, y are as shown.dc
ba
x
fe
ydc
ba
x
fe
y
![Page 36: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/36.jpg)
Warning!Warning!• Be careful when using mutators!
var a = list(1, 2, 3);
var b = list(6, 5);
var c = append(a, b);
c [1, [2, [3, [6, [5, []]]]]]
set_head(b, 100);
b [100, [5, []]
c [1, [2, [3, [100, [5, []]]]]]
Mutating b changes c as
well!
![Page 37: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/37.jpg)
Mutation and SharingMutation and Sharing
1 32
a
6 5
b
X 100
Initially,
1 32
c
Structure of c
Mutating b
![Page 38: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/38.jpg)
Another ExampleAnother Example
var a = list(1, 2, 3);
set_head(tail(tail(a)), a);
1 32
a
Cyclical structure!
Question
What is length(a)?
![Page 39: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/39.jpg)
Data Structure: QueueData Structure: Queue• A Queue is a sequence of items with the
first-in-first-out (FIFO) property.– Items are removed in the order they were inserted.
• Items are inserted at the rear of the queue, and removed from the front (or head) of the queue.
![Page 40: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/40.jpg)
Queue: SpecsQueue: Specs
• Constructor– make_queue: function
• Arguments: none• Returns: a new, empty queue
• Predicate– is_empty_queue : function
• Arguments: – Q: a queue
• Returns: true if Q is empty, false otherwise
![Page 41: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/41.jpg)
Queue: SpecsQueue: Specs• Selector
–Front_queue : function• Arguments:
–Q: a queue
• Returns: the item at the front of Q. Q is unchanged. Signals an error if Q is empty.
![Page 42: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/42.jpg)
Queue: SpecsQueue: Specs
• Mutator– Insert_queue: function
• Arguments: – Q: a queue– x: an item to be inserted.
• Effects: Q is mutated so that x is added to the rear of Q.
• Returns: the modified Q
![Page 43: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/43.jpg)
Queue: SpecsQueue: Specs• Mutator
– delete_queue: function• Arguments:
– Q: a queue
• Effects: Q is mutated so that the item at the front is removed. An error is signaled if Q is empty before the deletion.
• Returns: the modified Q.
![Page 44: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/44.jpg)
Queue: implementationQueue: implementation
• The items are stored in a list.
• But a pair is used to keep track of the front and rear of the queue.– This is for efficiency reasons.
ba c
front-ptr rear-ptr
![Page 45: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/45.jpg)
Queue: implementationQueue: implementation
• Adding an item.
ba c
front-ptr rear-ptr
d
rear-ptr
![Page 46: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/46.jpg)
Queue: implementationQueue: implementation
• Removing an item.
b ca
front-ptr
d
rear-ptr
![Page 47: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/47.jpg)
Queue: implementationQueue: implementation
First, define helper functions:
front_ptr = head;
rear_ptr = tail;
set_front_ptr = set_head;
set_rear_ptr = set_tail;
![Page 48: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/48.jpg)
Queue: implementationQueue: implementation
function is_empty_queue(q) { return is_empty_list(front_ptr(q));}
function make_queue() { return pair([], []); }
function front_queue(q) { if (is_empty_queue(q)) { “error” } else { return head(front_ptr(q)); } }
![Page 49: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/49.jpg)
Queue: implementationQueue: implementation
function delete_queue(q) { if (is_empty_queue(q)) { “error” } else { set_front_ptr(q, tail(front_ptr(q))); return q; }}
![Page 50: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/50.jpg)
Queue: implementationQueue: implementationfunction insert_queue(q, item) { var new_pair = pair(item,[]); if (is_empty_queue(q)) { set_front_ptr(q, new_pair); set_rear_ptr(q, new_pair); } else { set_tail(rear_ptr(q), new_pair); set_rear_ptr(q, new_pair); } return q;}
![Page 51: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/51.jpg)
Useful mutatorUseful mutator
• Remove front item, and return it.
function dequeue(q) {
var result = front_queue(q);
delete_queue(q);
return result;
}
![Page 52: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/52.jpg)
Using a QueueUsing a Queue• Printing documents
Lee’s document
Mary’s document
Lee’s email
Tom’s paper
Joe’s picture
Print Queue
![Page 53: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/53.jpg)
Data Structure: TableData Structure: Table
• A table is a sequence of key-value pairs.
• The key is used to index the table, and the value is associated with the key.
• A key-value pair is also called an entry.
![Page 54: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/54.jpg)
Table: SpecsTable: Specs• Constructor
– make_table : function• Arguments: none• Returns: a new, empty table
• Predicate– is_empty_table: function
• Arguments: – T, a table
• Returns: true if T is empty, false otherwise
![Page 55: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/55.jpg)
Table: SpecsTable: Specs
• Selector–lookup (get) : function
• Arguments:–K: a key to search for an entry–T: the table to be searched
• Returns: the key-value pair in T whose key matches K. If no entry found, error
![Page 56: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/56.jpg)
Table: SpecsTable: Specs• Mutator
– insert (put) : function
• Arguments:– K: a key
– V: a value to be associated with K
– T: the table to be inserted
• Effects: if an existing entry in T matches K, then the entry’s value is changed to V. Otherwise, a new entry K-V is added to T. T is modified.
• Returns: undefined
![Page 57: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/57.jpg)
Table: implementationTable: implementation
• Key-value entries are stored as pairs.
• Entries are stored in a list.
• List has a head, to allow first entry to be changed.
ba c
*table*
21 3
![Page 58: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/58.jpg)
Table: implementationTable: implementationfunction make_table() { return list(‘table’); }
function empty_table(table) {
return equal(table, list(‘table’)); }
function lookup(key, table) {
return tail(assoc(key, tail(table)); }
function assoc(key, records) {
if (is_empty_list(records)) { “error”;
} else if (equal(key, head(head(records)))) {
return head(records); } }
![Page 59: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/59.jpg)
Table: implementationTable: implementationfunction check_assoc(key, records) { if (is_empty_list(records)) { return false; } else if (equal(key, head(head(records)))) { return true; } } else { return check_assoc(key, tail(records)); } }
function insert(key, value, table) {
if (check_assoc(key, tail(table))) {
var record = assoc(key, tail(table));
set_tail(record, value);
} else {
set_tail(table, pair(pair(key,value),
tail(table))); } }
![Page 60: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/60.jpg)
Table: implementationTable: implementation
function delete(key,table){
Homework!
}
![Page 61: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/61.jpg)
2D tables2D tables• Two-dimensional tables are possible:
– Two keys needed
– Entry: key1-key2-value
• Implementation:– Nested 1D tables (subtables)
– key1 used to locate a 1D subtable
– key2 used to index within this subtable
• put, and get are simply lookup and insert on a 2D table
![Page 62: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/62.jpg)
2D tables2D tables
ba
letters
9897
-+ *
math
4543 42
*table*
![Page 63: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/63.jpg)
Using TablesUsing Tables
• Problem: determine word frequency in a text message.
• e.g. given list(‘mary’, ‘had’, ‘a’, ‘little’, ‘lamb’, ‘little’, ‘lamb’, ‘little’, ‘lamb’, ‘mary’, ‘had’, ‘a’, ‘little’, ‘lamb’, ‘whose’, ‘fleece’, ‘was’, ‘white’, ‘as’, ‘snow’)
• Determine how many times each word occurs.mary: 2, little: 4, lamb: 4, . . .
![Page 64: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/64.jpg)
SolutionSolution• Maintain a table
– Word is the key
– Count is the value
• cdr down the message list– For each word w
• If w exists in table, then increment its value• Otherwise, add entry (w,1) to the table
– Ignore punctuations
![Page 65: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/65.jpg)
Queues using tablesQueues using tables
• empty-Q = empty-table• To insert item M, insert entry (N, M) into
table.– N is a running number that we automatically
generate. This serves as a unique key in the table. • when table is first created, N=0
– After inserting, we increment N.
– N also indicates the order in which the items were inserted.
![Page 66: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/66.jpg)
Queues using tablesQueues using tables• To delete an item from the front of the
queue,– Lookup key S in the table– S is the smallest key– Delete that entry– Increment S
• To think about:– How to implement front_queue?– What is the time complexity of these functions?
![Page 67: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/67.jpg)
Questions of the DayQuestions of the Day
• Can you implement tables using queues?– Hint: consider using 2 queues.
– Think of how to represent an empty table.
– How to implement table operations (e.g. lookup, insert!) using queue operations?
• Can you implement table more efficiently?
![Page 68: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/68.jpg)
SummarySummary• Environment Model replaces RSM.
– Frames are local repositories of state
• To evaluate a function in the Environment Model:
Create a NEW frame in the closing environment (second pointer of function value)
Bind variables in new frame Evaluate body of the function (first pointer of
function value) in the new frame
![Page 69: CS1101S Lecture 14: Environment Model & Mutable Data 10 October 2012](https://reader030.vdocuments.mx/reader030/viewer/2022032722/56649f475503460f94c6987b/html5/thumbnails/69.jpg)
SummarySummary• Assignment allows us to create
mutable data structures.• set_head, set_tail mutate
(mutable) lists.• Be careful when mutating things!• Queues and tables are useful data
structures• Data structures can be used to
implement other data structures!