67
Programming Languages and Techniques (CIS120) Lecture 2 January 16 th , 2015 ValueOriented Programming

Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Programming  Languages    and  Techniques  

(CIS120)  

Lecture  2  January  16th,  2015  

 Value-­‐Oriented  Programming  

Page 2: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

If  you  are  joining  us  today…  •  Read  the  course  syllabus/lecture  notes  on  the  website  

–  www.cis.upenn.edu/~cis120  

•  Sign  yourself  up  for  Piazza  –  piazza.com/upenn/spring2015/cis120  

•  Install  OCaml/Eclipse  on  your  laptop;  ask  if  you  have  quesTons  –  www.cis.upenn.edu/~cis120/current/ocaml_setup.shtml    

•  Obtain  a  clicker  •  No  laptops,  tablets,  smart  phones,  etc.,  during  lecture  

CIS120  

Page 3: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

RegistraTon  •  If  you  are  not  registered,  add  your  name  to  the  waiTng  list  –  There  are  spots  available,  but  we  want  to  make  sure  that  those  who  need  to  take  the  course  this  semester  can  register  first  

•  Need  a  different  recitaTon?  –  RecitaTons  SecTons  207,  211,  &  213  have  the  most  space  –  If  the  want  you  want  is  open,  switch  online  –  If  you  need  to  a]end  a  closed  recitaTon,  add  your  name  to  the  recitaTon  change  request  form  

–  Go  to  the  recitaTon  you  want,  even  if  not  registered  

CIS120  

Page 4: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Announcements  •  Please  read:    

–  Chapter  2  of  the  course  notes  –  OCaml  style  guide  on  the  course  website    (h]p://www.seas.upenn.edu/~cis120/current/programming_style.shtml)  

•  Homework  1:    OCaml  Finger  Exercises  –  PracTce  using  OCaml  to  write  simple  programs  –  Start  with  first  4  problems  (lists  next  week!)  –  Due:  Tuesday,  January  27th    at  11:59:59pm    (midnight)  –  Start  early!        

CIS120  

Page 5: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Homework  Policies  •  Projects  will  be  (mostly)  automaTcally  graded  

–  We’ll  give  you  some  tests,  as  part  of  the  assignment  –  You’ll  write  your  own  tests  to  supplement  these    –  Our  grading  script  will  apply  addiTonal  tests  –  Your  score  is  based  on  how  many  of  these  you  pass  –  Most  assignments  will  also  include  style  points,  added  later  –  Your  code  must  compile  to  get  any  credit  

•  You  will  be  given  your  score  (on  the  automaTcally  graded  porTon  of  the  assignment)  immediately  

•  MulTple  submissions  are  allowed  –  First  few  submissions:  no  penalty  –  Each  submission  aler  the  first  few  will  be  penalized  –  Your  final  grade  is  determined  by  the  best  raw  score    

•  Late  days  –  You  have  4  late  days  to  use  over  the  semester  –  You  may  use  at  most  2  late  days  for  any  assignment  –  Submission  system  will  automa:cally  close  if  you  do  not  have  any  late  days  

remaining  –  Save  your  late  days  for  emergencies!    

CIS120    

Page 6: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

RecitaTons  /  Lab  SecTons  •  First  recitaTons  start  Wednesday  and  Thursday  

–  Bring  your  laptops  –  Install  tools  (OCaml,  eclipse)  on  your  laptop  before  recitaTon  next  week  

–  www.cis.upenn.edu/~cis120/current/ocaml_setup.shtml    

•  Goals  of  first  meeTng:  – Meet  your  TAs  and  classmates  –  Debug  tool  (OCaml,  eclipse)  installaTon  problems  –  PracTce  with  OCaml  before  your  first  homework  is  due  

•  Office  hours  Tmes  on  the  web  site  calendar.  

CIS120    

Page 7: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Important  Dates  

•  Homework:  –  Homework  due  dates  listed  on  course  calendar  – Mostly  Tuesdays,  but  not  always  

•  Exams:  –  12%  First  midterm:  Monday,  Feb  16th,  in  class  –  12%  Second  midterm:    Wednesday,  March  25th,  in  class  –  18%  Final  exam:  TBA  –  Contact  instructor  well  in  advance  if  you  have  a  conflict    

 

CIS120    

Page 8: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Where  to  ask  quesTons  •  Course  material  

–  Piazza  Discussion  Boards  –  TA  office  hours,  on  webpage  calendar  –  Tutoring,  Sunday  and  Monday  evenings  –  Prof  office  hours:  Mondays  from  3:30  to  5:00  PM,  or  by  appointment  (changes  will  be  announced  on  Piazza)  

•  HW/Exam  Grading:  see  webpage  •  About  the  CIS  majors  &  RegistraTon  

– Ms.  Jackie  Caliman,  CIS  Undergraduate  coordinator  

   

CIS120    

Page 9: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Clickers  

Page 10: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Clicker  Basics  •  Beginning  today,  we’ll  use  clickers  in  each  lecture  

–  Grade  recording  starts  next  Friday:  1/23/2015  •  Any  kind  of  TurningPoint  ResponseCard  is  fine  

–  Doesn’t  have  to  be  the  exact  model  sold  in  the  bookstore  

•  Use  the  link  on  the  course  website  to  register  your  device  ID  with  the  course  database  

CIS120   6-­‐character  device  ID  

Page 11: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Test  Drive  •  Clickers  out!  •  Press  any  of  the  number  bu]ons    

– Make  sure  the  display  looks  like  this:  

•  If  it  looks  like  this…  –  …  first  check  that  the  channel  is  set  to  41  

•  If  not,  try  pressing  Channel,  then  41,  then  Channel  again  to  reset  the  channel  

–  If  this  doesn’t  work  come  to  office  hours  

CIS120  

Page 12: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

CIS120  

Have  you  successfully  installed  OCaml  on  your  laptop?  

1)  Yes2)  No

Page 13: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

CIS120  

In  what  language  do  you  have  the  most  significant  programming  experience?  

1)  Java or C#2)  C, C++, or Objective-C3)  Python, Ruby, Javascript, or MATLAB4)  Clojure, Scheme, or LISP5)  OCaML, Haskell, or Scala6)  Other

Page 14: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Programming  in  OCaml  

Read  Chapter  2  of  the  CIS  120  lecture  notes,  available  from  the  course  web  page  

 

Page 15: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

What  is  an  OCaml  module?  ;; open Assert

let attendees (price:int) :int = (-15 * price) / 10 + 870

let test () : bool = attendees 500 = 120

;; run_test "attendees at 5.00" test

let x = attendees 500

;; print_int x;; print_endline "end of demo"

 

CIS120  

module  import  

commands  

funcTon  declaraTons  

let  declaraTons  

Page 16: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

What  does  an  OCaml  program  do?  

CIS120  

To  know  what  an  OCaml  program  will  do,  you  need  to  know  what  the  value  of  each  expression  is.  

To  know  if  the  test  will  pass,    we  need  to  know  whether  this  expression  is  true  or  false  

To  know  what  will  be  printed  we  need  to  know  the    value  of  this  expression  

;; open Assert

let attendees (price:int) :int = (-15 * price) / 10 + 870

let test () : bool = attendees 500 = 120

;; run_test "attendees at 5.00" test

let x = attendees 500

;; print_int x

 

Page 17: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Value-­‐Oriented  Programming  

pure,  funcTonal,  strongly  typed      

Page 18: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Course  goal  

•  BeauTful  code  –  is  simple  –  is  easy  to  understand  –  is  likely  to  be  correct  –  is  easy  to  maintain  –  takes  skill  to  develop  

CIS120    

 

Strive  for  beau:ful  code.    

Page 19: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Value-­‐Oriented  Programming  •  Java,  C,  C#,  C++,  Python,  Perl,  etc.  are  tuned  for  an  impera2ve  programming  style  –  Programs  are  full  of  commands  

•  “Change  x  to  5!”  •  “Increment  z!”  •  “Make  this  point  to  that!”  

•  Ocaml,  on  the  other  hand,  promotes  a  value-­‐oriented  style  – We’ve  seen  that  there  are  a  few  commands…  

•  e.g.,  print_endline, run_test          …  but  these  are  used  rarely  – Most  of  what  we  write  is  expressions  denoTng  values  

CIS120  

Page 20: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Metaphorically,  we  might  say  that    

imperaTve  programming  is  about  doing  while  

value-­‐oriented  programming  is  about  being    

CIS120  

Page 21: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Programming  with  Values  •  Programming  in  value-­‐oriented  (a.k.a.  pure  or  func:onal)  

style  can  be  a  bit  challenging  at  first.  

•  But,  in  the  end,  it  leads  to  code  that  is  simpler  to  understand…    

CIS120  

Page 22: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Values  and  Expressions  

•  Every  OCaml  expression  has  a  type*  determined  by  its  consTtuent  subexpressions.  

•  Each  type  corresponds  to  a  set  of  values.  •  Later  we’ll  see  how  to  create  our  own  types  and  values.    CIS120  

Types Values Operations Expressions

int -1 0 1 2 + * - / 3 + (4 * x)

float 0.12 3.1415-2.56 +. *. -. /. 3.0 *. (4.0 *. x)

string “hello” “CIS120” ^ “Hello, ” ^ x

bool true false && || not (not x) || y

*OCaml  is  a  strongly  staTcally-­‐typed  language.    Note  that  there  is  no  automaTc  conversion  from  float  to  int,  etc.,  so  you  must  use  explicit  conversion  operaTons  like  string_of_int  or  float_of_int  

Page 23: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

CalculaTng  Expression  Values  

OCaml’s  computaTonal  model.  

CIS120  

Page 24: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

SimplificaTon  vs.  ExecuTon  •  We  can  think  of  an  OCaml  expression  as  just  a  way  of  wriTng  down  a  value  

•  We  can  visualize  running  an  OCaml  program  as  a  sequence  of  calcula:on  or  simplifica:on  steps  that  eventually  lead  to  this  value  

•  By  contrast,  a  running  Java  program  performs  a  sequence  of  ac:ons  or  events  

•  …  a  variable  named  x  gets  created  •  …  then  we  put  the  value  3  in  x  •  …  then  we  test  whether  y  is  greater  than  z  •  …  the  answer  is  true,  so  we  put  the  value  4  in  x  

–  They  modify  the  implicit,  pervasive  state  of  the  machine  

CIS120  

Page 25: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

CalculaTng  with  Expressions  OCaml  programs  mostly  consist  of  expressions.    We  understand  programs  by  simplifying  expressions  to  

values:    3 ⇒ 3  (values  compute  to  themselves)  3 + 4 ⇒ 7 2 * (4 + 5) ⇒ 18 attendees 500 ⇒ 120  The  notaTon  <exp>  ⇒  <val>  means  that  the  expression  

<exp>  computes  to  the  value  <val>.  

CIS120  

Note  that  the  symbol  ‘⇒’  is  not  OCaml  syntax.    It’s  a  convenient  way  to  talk  about  the  way  OCaml  programs  behave.  

Page 26: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Step-­‐wise  CalculaTon  •  We  can  understand  ⇒  in  terms  of  single  step  calculaTons  wri]en  ‘⟼’  

 •  For  example:          (2+3) * (5-2)  ⟼  5 * (5-2) because  2+3  ⟼  5    ⟼  5 * 3 because  5-­‐2  ⟼  3    ⟼  15                                                            because  5*3  ⟼15  

 •  Every  form  of  expression  can  be  simplified  with  ⟼    CIS120  

Page 27: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

CondiTonal  Expressions          •  OCaml  condiTonals  are  also  expressions:  they  can  be  used  inside  of  other  expressions:        

CIS120  

if s = "positive" then 1 else -1

if day >= 6 && day <= 7 then "weekend" else "weekday"

(if 3 > 0 then 2 else -1) * 100

if x > y then "x is bigger"else if x < y then "y is bigger"else "same"

Page 28: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  CondiTonal  Expressions  •  A  condiTonal  expression  yields  the  value  of  either  its  ‘then’-­‐

expression  or  its  ‘else’-­‐expression,  depending  on  whether  the  test  is  ‘true’  or  ‘false’.  

•  For  example:              (if 3 > 0 then 2 else -1) * 100

⟼ (if true then 2 else -1) * 100⟼ 2 * 100⟼ 200

•  The  type  of  a  condiTonal  expression  is  the  (one!)  type  shared  by  both  of  its  branches.  

•  It  doesn’t  make  sense  to  leave  out  the  ‘else’  branch  in  an  ‘if’.    (What  would  be  the  result  if  the  test  was  ‘false’?)  

 CIS120  

Page 29: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Top-­‐level  Let  DeclaraTons  •  A  let  declaraTon  gives  a  name  (a.k.a.  an  iden:fier*)  to  the  value  denoted  by  some  expression      

     •  There  is  no  way  of  assigning  a  new  value  to  an  idenTfier  aler  it  is  declared  –  it  is  immutable.  

•  The  scope  of  a  top-­‐level  idenTfier  is  the  rest  of  the  file  aler  the  declaraTon.  

CIS120  

let pi : float = 3.14159let seconds_per_day : int = 60 * 60 * 24

*We  someTmes  call  these  idenTfiers  variables,  but  the  terminology  is  a  bit  confusing  because  in  languages  like  Java  and  C  a  variable  is  something  that  can  be  modified  over  the  course  of  a  program.    In  OCaml,  like  in  mathemaTcs,  once  a  variable’s  value  is  determined,  it  can  never  be  modified…    As  a  reminder  of  this  difference,  for  the  purposes  of  OCaml  we’ll  try  to  use  the  word  “idenTfier”  when  talking  about  the  name  bound  by  a  let.  

Page 30: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Local  Let  Expressions  •  Let  declaraTons  can  appear  both  at  top-­‐level  and  nested  

within  other  expressions.          

         •  Local  (nested)  let  declaraTons  are  followed  by  ‘in’  

–  e.g.  a]endees,  revenue,  and  cost      •  Top-­‐level  let  declaraTons  are  not  

–  e.g.  profit_500  •  The  scope  of  a  local  idenTfier  is  the  expression  aler  the  ‘in’  

CIS120  

let profit_500 : int =let attendees = 120 inlet revenue = attendees * 500 inlet cost = 18000 + 4 * attendees inrevenue – cost

The  scope  of  a]endees  is  

the  expression  aler  the  ‘in’  

Page 31: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Typing  Let  Expressions          •  Inside  its  scope,  a  let-­‐bound  idenTfier  has  the  type  of  the  expression  it  is  bound  to.  

•  The  type  of  the  whole  local  let  expression  is  the  type  of  the  expression  aler  the  ‘in’  

•  Type  annotaTons  in  OCaml  are  wri]en  using  colon:      let x : int = … ((x + 3) : int) …  

CIS120  

let x = 3 + 5 in string_of_int (x * x)

: string: int : int

: string

Page 32: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Scope  MulTple  declaraTons  of  the  same  variable  or  funcTon  name  are  allowed.    The  later  declaraTon  shadows  the  earlier  one  for  the  rest  of  the  program.        

CIS120  

scope  of  x    

scope  of  y    

scope  of  x  (shadows  earlier  x)    

scope  of  z  

let total : int = let x = 1 in let y = x + 1 in let x = 1000 in let z = x + 2 in x + y + z

scope  of  total  is  the  rest  of  the  file  

Page 33: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let x = 1 in let y = x + 1 in let x = 1000 in let z = x + 2 in x + y + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 34: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let x = 1 in let y = x + 1 in let x = 1000 in let z = x + 2 in x + y + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

First,  we  simplify  

the  right-­‐hand  side  of  the    

declaraTon  for  idenTfier  total.  

Page 35: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let x = 1 in let y = x + 1 in let x = 1000 in let z = x + 2 in x + y + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

This  r.h.s.  is  already  a  value.  

Page 36: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let x = 1 in let y = 1 + 1 in let x = 1000 in let z = x + 2 in x + y + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

SubsTtute  1  for  x  here.    

But  not    here  because  the  second  x  

shadows  the  first.    

Page 37: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let x = 1 in let y = 1 + 1 in let x = 1000 in let z = x + 2 in x + y + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Discard  the  local  let  since  it’s  been  

subsTtuted  away.  

Page 38: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let y = 1 + 1 in let x = 1000 in let z = x + 2 in x + y + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 39: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let y = 1 + 1 in let x = 1000 in let z = x + 2 in x + y + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Simplify  the  expression  remaining  in  

scope.  

Page 40: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let y = 1 + 1 in let x = 1000 in let z = x + 2 in x + y + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Repeat!  

Page 41: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let y = 2 in let x = 1000 in let z = x + 2 in x + y + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 42: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let y = 2 in let x = 1000 in let z = x + 2 in x + 2 + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 43: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let y = 2 in let x = 1000 in let z = x + 2 in x + 2 + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 44: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let x = 1000 in let z = x + 2 in x + 2 + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 45: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let x = 1000 in let z = x + 2 in x + 2 + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 46: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let x = 1000 in let z = x + 2 in x + 2 + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 47: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let x = 1000 in let z = 1000 + 2 in 1000 + 2 + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 48: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let x = 1000 in let z = 1000 + 2 in 1000 + 2 + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 49: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let z = 1000 + 2 in 1000 + 2 + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 50: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let z = 1000 + 2 in 1000 + 2 + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 51: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let z = 1000 + 2 in 1000 + 2 + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 52: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let z = 1002 in 1000 + 2 + z

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 53: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let z = 1002 in 1000 + 2 + 1002

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 54: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = let z = 1002 in 1000 + 2 + 1002

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 55: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = 1000 + 2 + 1002

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 56: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = 1000 + 2 + 1002 ⇒ 2004

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 57: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Simplifying  Let  Expressions        

CIS120  

let total : int = 2004

•  To  calculate  the  value  of  a  let  expression:  –  first  calculate  the  value  of  the  right  hand  side  –  then  subs:tute  the  resulTng  value  for  the  idenTfier  in  its  scope  –  drop  the  ‘let  –  in’  for  local  lets  (it’s  no  longer  needed)  –  simplify  the  expression  remaining  in  the  scope  

Page 58: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

let total_secs (hours:int) (minutes:int) (seconds:int) : int = (hours * 60 + minutes) * 60 + seconds

(Top-­‐level)  FuncTon  DeclaraTons  

CIS120  

funcTon  name   parameter  names   parameter  types  

result  type  

funcTon  body  (an  expression)  

Page 59: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

FuncTon  Calls  Once  a  funcTon  has  been  declared,  it  can  be  invoked  by  wriTng  the  funcTon  name  followed  by  a  list  of  arguments.    This  is  func:on  applica:on  expression.  

     (Note  that  the  list  of  arguments  is  not  parenthesized.)    

CIS120  

total_secs 5 30 22

Page 60: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

CalculaTng  With  FuncTons  •  To  calculate  the  value  of  a  funcTon  applicaTon,  first  calculate  

values  for  its  arguments  and  then  subs:tute  them  for  the  parameters  in  the  body  of  the  funcTons.  

     total_secs (2 + 3) 12 17⟼  total_secs 5 12 17      ⟼  (5 * 60 + 12) * 60 + 17  subst.  the  args  in  the  body  ⟼  (300 + 12) * 60 + 17⟼  312 * 60 + 17⟼  18720 + 17⟼  18737

CIS120  

let total_secs (hours:int) (minutes:int) (seconds:int) : int =(hours * 60 + minutes) * 60 + seconds

Page 61: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Summary  of  ‘let’  Syntax  •  OCaml  offers  two  forms  of  ‘let’  declaraTons:  

–  Top-­‐level:  

   –  Local:  

CIS120  

let x = 1let y = 2… rest …

let z = let x = 1 in let y = 2 in x + y

no  “in”  

scope  of  binding  =  rest  of  file  

scope  of  binding  =  expression  following  “in”  

Page 62: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Summary  of  ‘let’  Syntax  •  Each  let-­‐binding  declares  a  name  for  either  a  value…    

         or  a  func:on…          

 CIS120  

let x = 2 + 4 in x + x

let f (y:int) : int = y + y in f 2

Note  that  local  funcTon  bindings  are  also  allowed  (as  illustrated  here)!    

Page 63: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Commands  

CIS120  

Page 64: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

Commands            •  Top-­‐level  commands  run  tests  and  print  to  the  console  

–  They  affect  the  state  of  the  machine  but  do  not  yield  useful  values  

•  Such  commands  are  the  only  places  that  semicolons  should  appear  in  your  programs  (so  far)  –  Many  languages  use  ‘;’  as  statement  terminators…not  OCaml  

CIS120  /  Fall  2013  

;; run_test "Attendees at $5.00" test ;; print_endline "Attendees at $5.00" ;; print_int (attendees 500)

Page 65: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

CIS120  

What  is  the  value  computed  for  ‘answer’  in  the  following  program?    (0  ..  9)  

let answer : int = let x = 1 in let y = x + x in x + y

Page 66: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

CIS120  

What  is  the  value  computed  for  ‘answer’  in  the  following  program?    (0  ..  9)  

let answer : int = let x = 3 in let f (y : int) = y + x in let x = 1 in f x

Page 67: Programming)Languages)) and)Techniques) (CIS120))cis120/archive/15sp/lectures/lec02.pdf · Whatdoes)an)OCaml)program)do?) CIS120) To&know&whatan&OCaml&programwill&do,&you&need&to&know&

TODO  •  Sign  up  for  Piazza  

–  via  link  on  course  web  page  

•  Obtain  a  clicker  

•  Homework  1:    OCaml  Finger  Exercises  –  PracTce  using  OCaml  to  write  simple  programs  –  Start  with  first  4  problems  (lists  next  week!)  –  Start  early!    

CIS120