--- title: Drill 10 Solution tags: Drills-F20, 2020 --- # Drill 10 Solution ## Question 1 For this and the next several questions, we'll use a position datatype defined as follows: ``` data Posn: | posn(x :: Number, y :: Number) end ``` Write an expression that constructs a position with an x-value of 2 and a y-value of 29. ::: spoiler Answer `posn(2,29)` To create a data value of type `Posn`, use the `posn` constructor that takes in 2 numbers for its x and y values. ::: ## Question 2 Assume we've defined the `Posn` data-type, as above, and we've defined a `Posn` named `p`. Write an expression that evaluates to the x-value of `p`. ::: spoiler Answer `p.x` Use the `.` operator in order to access the values of a given data construct. ::: ## Question 3 <!-- Question 3 --> Assume we've defined the `Posn` data-type, as above, and we've defined a `Posn` named `p`. Write an expression that constructs a new position with each coordinate of `p` doubled. ::: spoiler Answer `posn(2 * p.x, 2 * p.y)` We use the posn constructor, passing in 2 * the x and y coordinates of p. ::: ## Question 4 <!-- Question 4 --> Given this data type Student and value with name `jeff`: ``` data Student: | student(id :: String, major :: String, GPA :: Number) end jeff = student("B00", "CS", 3.5) ``` Which expression creates a new value, `jeff-updated`, with a GPA of 4.0? ( ) jeff-updated = jeff.GPA + .05 ( ) jeff-updated = Student(jeff.id, jeff.major, 4.0) ( ) jeff-updated = student(jeff.id, jeff.major, 4.0) ( ) jeff-updated = jeff.GPA.4.0 :::spoiler Answer ( ) jeff-updated = jeff.GPA + .05 ( ) jeff-updated = Student(jeff.id, jeff.major, 4.0) (X) jeff-updated = student(jeff.id, jeff.major, 4.0) ( ) jeff-updated = jeff.GPA.4.0 Use the student constructor in order to make a new value of type Student. ::: ## Question 5 <!-- Question 5 --> Fill in the blanks to create the data-type `Three-D-Posn` with coordinates x, y, and z. ``` [Blank1] Three-D-Posn: | posn3d(x :: Number, y :: Number, [Blank2]) [Blank3] ``` :::spoiler Answer Blank1: `data` The definition of any datatype begins with the keyword `data`. Blank2: `z :: Number` We need the third coordinate `z`, and like the others, it is of type `Number`. Blank3: `end` Datatype definitions need to end with `end`, just like a function or `if` expression. :::