Recursive Data Types

Recursive Data Types

RECURSIVE DATA TYPES DR. ALEX GERDES UNIVERSITY OF GOTHENBURG | CHALMERS UNIVERSITY OF TECHNOLOGY Today • Recursive data types • Case expressions UNIVERSITY OF GOTHENBURG | CHALMERS UNIVERSITY OF TECHNOLOGY Types are sets of values • In Haskell data Bool = False | True data Suit = Spades | Hearts | Diamonds | Clubs data Rank = Numeric Int | Jack | Queen | King | Ace data Card = Card Rank Suit • In math: – Bool = {False, True} – Suit = {Spades, Hearts, Diamonds, Clubs} – Rank = {Numeric n | n ∈ Int} ∪ {Jack, Queen, King, Ace} – Card = {Card r s | r ∈ Rank, s ∈ Suit} UNIVERSITY OF GOTHENBURG | CHALMERS UNIVERSITY OF TECHNOLOGY Circular definitions, do they make sense? fac 0 = 1 fac n = n * fac(n-1) • Recursive functions: make sense, if you follow some basic rules f x = f x • Circular definitions of numbers? – They can make sense when seen as as equations in math, but as programs x,y :: Int they usually make no sense… x = x y = 2 * y • Circular definitions of lists? – They can make sense – This works in Haskell because Haskell ha,haha :: String uses lazy evaluation ha = "ha"++ha haha = take 10 ha UNIVERSITY OF GOTHENBURG | CHALMERS UNIVERSITY OF TECHNOLOGY The meaning of circular definition of types • What set of values does this correspond to? – Nat = {Zero} ∪ {Succ n | n ∈ Nat} -- Peano's natural numbers • But this is still a circular definition… data Nat = Zero | Succ Nat • We can instead view the alternatives in data type definitions as rules that together generate the intended set: – Rule 1: Zero ∈ Nat – Rule 2: if n ∈ Nat then Succ n ∈ Nat • Recursive data types are also called inductive data types UNIVERSITY OF GOTHENBURG | CHALMERS UNIVERSITY OF TECHNOLOGY Inductively defined sets • By using induction we can define sets that contain infinitely many elements – Finite sets: enumerate all the elements – Infinite sets: give a finite set of rules that describe how to generate the elements • Recursive data type definitions create data types with infinitely many values – The values can also be arbitrarily large § For example, there is no limit on how long lists can be – We can work with data structures whose size is not known in advance UNIVERSITY OF GOTHENBURG | CHALMERS UNIVERSITY OF TECHNOLOGY LIVE CODING UNIVERSITY OF GOTHENBURG | CHALMERS UNIVERSITY OF TECHNOLOGY Recursive data types • The values in these types are all linear sequences of things. data Hand = Empty | Add Card Hand data List a = Nil | Cons a (List a) data Nat = Zero | Succ Nat -- Example values of these types: hand = Add c1 (Add c2 (Add c3 Empty) list = Cons 1 (Cons 2 (Cons 3 (Cons 4 Nil))) number = Succ (Succ (Succ Zero)) UNIVERSITY OF GOTHENBURG | CHALMERS UNIVERSITY OF TECHNOLOGY Branching data structures • How would we create a data type for flowcharts (action diagrams)? • More examples of flowcharts UNIVERSITY OF GOTHENBURG | CHALMERS UNIVERSITY OF TECHNOLOGY LIVE CODING UNIVERSITY OF GOTHENBURG | CHALMERS UNIVERSITY OF TECHNOLOGY A simpler tree-shaped data type • Binary trees are trees where nodes have two subtrees data BTree = Leaf | Node BTree Int Btree UNIVERSITY OF GOTHENBURG | CHALMERS UNIVERSITY OF TECHNOLOGY KAHOOT UNIVERSITY OF GOTHENBURG | CHALMERS UNIVERSITY OF TECHNOLOGY UNIVERSITY OF GOTHENBURG | CHALMERS UNIVERSITY OF TECHNOLOGY.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    13 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us