Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
pp:2026:scala:l05 [2026/03/26 07:23]
ldaniel given conversions la 5.1.3
pp:2026:scala:l05 [2026/05/02 21:34] (current)
cosmin.asavoae
Line 23: Line 23:
 </​code>​ </​code>​
  
-**5.1.3** Write a function which takes an Int and converts it to a Nat. Write the opposite ​function, which takes a Nat and converts it to Int.+**5.1.3** Write a function which takes an Int and converts it to a Nat. Write the inverse ​function, which takes a Nat and converts it to Int.
 <code scala> <code scala>
 def toNat(x: Int): Nat = ??? def toNat(x: Int): Nat = ???
Line 31: Line 31:
 <hidden Automatic conversions>​ <hidden Automatic conversions>​
 <code scala> <code scala>
-given nat2Int: Conversion[Nat,​ Int] with  +given nat2Int: Conversion[Nat,​ Int] = toInt
-   def apply(x: Nat): Int = toInt(x)+
  
-given int2Nat: Conversion[Int,​ Nat] with  +given int2Nat: Conversion[Int,​ Nat] = toNat
-   def apply(x: Int): Nat = toNat(x)+
  
 // the second conversion is used to cast params from Int to Nat // the second conversion is used to cast params from Int to Nat
Line 98: Line 96:
       }       }
  
-    ​'\n' ​+ printTree(this)+    ​"\n" ​+ printTree(this)
   }   }
 } }
 +def leaf_node(value : Int) : BinaryTree = Node(TVoid, value, TVoid)
 </​code>​ </​code>​
  
Line 117: Line 116:
 </​code>​ </​code>​
  
-**5.3.2** Write a function which takes a BinaryTree and returns the number of nodes in its subtree.+**5.3.2** Write a function which takes a BinaryTree and returns the total number of nodes in it.
 <code scala> <code scala>
-def subtree(tree: BinaryTree):​ Int = ???+def size(tree: BinaryTree):​ Int = ???
 </​code>​ </​code>​
  
Line 132: Line 131:
 </​code>​ </​code>​
  
-**(!) 5.3.5** Write a function which takes two BinaryTree and tries to assign the second tree as a child of the first. It should return a "​container"​ of a BinaryTree .+**(!) 5.3.5** Write a function which takes two BinaryTree and tries to assign the second tree as a child of the first. It should return a "​container"​ of a BinaryTree. The append is successful if the second tree can become a direct child of the first tree's root.
 <code scala> <code scala>
 def append(tree1:​ BinaryTree, tree2: BinaryTree):​ Option[BinaryTree] = ??? def append(tree1:​ BinaryTree, tree2: BinaryTree):​ Option[BinaryTree] = ???
Line 140: Line 139:
 Given the following implementation of expressions,​ solve the next few exercises. Given the following implementation of expressions,​ solve the next few exercises.
 <code scala> <code scala>
-trait Expr+sealed ​trait Expr
 case class Atom(a: Int) extends Expr case class Atom(a: Int) extends Expr
 case class Add(e1: Expr, e2: Expr) extends Expr case class Add(e1: Expr, e2: Expr) extends Expr
Line 162: Line 161:
  
 <​hidden>​ <​hidden>​
-If you work outside of worksheets, you can define the trait as:+<del>If you work outside of worksheets</​del>​, you can define the trait as:
 <code scala> <code scala>
 sealed trait Expr { sealed trait Expr {
     def + (that: Expr): Expr = Add(this, that)     def + (that: Expr): Expr = Add(this, that)
-    def * (that: Expr): Expr = Mul(this, that)+    def * (that: Expr): Expr = Mult(this, that)
 } }
 case class Atom(a: Int) extends Expr case class Atom(a: Int) extends Expr
Line 190: Line 189:
 will be represented by the list ''​[ [1,​2,​3],​[4,​5,​6],​[7,​8,​9] ]''​. will be represented by the list ''​[ [1,​2,​3],​[4,​5,​6],​[7,​8,​9] ]''​.
  
 +<hidden Scala definition>​
 +In Scala, we can define this matrix like this:
 +<code scala>
 +val mat = List(List(1,​ 2, 3), List(4, 5, 6), List(7,​8,​9))
 +</​code>​
 +Or.. if you like Cons and Nil, like this:
 +<code scala>
 +val mat2 = (1::​2::​3::​Nil)::​(4::​5::​6::​Nil)::​(7::​8::​9::​Nil)::​Nil
 +</​code>​
 +</​hidden>​
 To make signatures more legible, add the //type alias// to your code: To make signatures more legible, add the //type alias// to your code:
 <code scala> type Matrix = List[List[Int]] </​code>​ <code scala> type Matrix = List[List[Int]] </​code>​