Advertisement
VladNitu

nistr

May 24th, 2023
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.66 KB | None | 0 0
  1. import Library._
  2.  
  3. object Desugar {
  4.  
  5. def desugar(e: ExprExt): ExprC = e match {
  6. case NumExt(n) => NumC(n)
  7. case PlusExt(e1, e2) => PlusC(desugar(e1), desugar(e2))
  8. case MultExt(e1, e2) => MultC(desugar(e1), desugar(e2))
  9. case FdExt(x, e) => FdC(x, desugar(e))
  10. case AppExt(f, a) => AppC(desugar(f), desugar(a))
  11. case IdExt(x) => IdC(x)
  12. case ConsExt(h, t) => ConsC(desugar(h), desugar(t))
  13. case NilExt() => NilC()
  14.  
  15. case ListExt(es) =>
  16. solveList(es)
  17. case ListMapExt(f, l) =>
  18. ListMapC(desugar(f), desugar(l))
  19. case MatrixExt(rs) =>
  20. solveMatrix(rs)
  21. case ScalarMultExt(n, m) =>
  22.  
  23. ListMapC(
  24. FdC("row",
  25. ListMapC(
  26. FdC("el", MultC(desugar(n), IdC("el"))), IdC("row"))),
  27. desugar(m))
  28.  
  29.  
  30.  
  31. // ListMapC(
  32. // FdC("row", ListMapC(FdC("x", MultC(desugar(n), IdC("x"))), IdC("row"))),
  33. // desugar(m))
  34.  
  35.  
  36.  
  37.  
  38.  
  39. // ListMapC(FdC("row",
  40. // ListMapC(FdC("el", MultC(IdC("el"), desugar(n))), IdC("row"))
  41. // ), desugar(m))
  42.  
  43. }
  44.  
  45. def solveList(es: List[ExprExt]): ExprC = es match {
  46. case h :: t => ConsC(desugar(h), solveList(t))
  47. case Nil => NilC()
  48. }
  49.  
  50. def solveMatrix(rs: List[RowExt]): ExprC = rs match {
  51. case row :: t => ConsC(solveList(row.es), solveMatrix(t))
  52. case Nil => NilC()
  53. }
  54.  
  55.  
  56.  
  57. }
  58.  
  59. // import Library._
  60. //
  61. // object Desugar {
  62. //
  63. //
  64. // def solveList(es: List[ExprExt]): ExprC = es match {
  65. // case h :: t => ConsC(desugar(h), solveList(t))
  66. // case Nil => NilC()
  67. // }
  68. //
  69. // def solveListC(es: List[ExprC]): ExprC = es match {
  70. //
  71. // case h :: t => ConsC(h, solveListC(t))
  72. // case Nil => NilC()
  73. // }
  74. //
  75. // def solveRow(row: RowExt): ExprC = row match {
  76. // case RowExt(es) => solveList(es)
  77. // }
  78. //
  79. // def solveMatrix(rs: List[RowExt]): ExprC = rs match {
  80. // case row :: t => ConsC(solveRow(row), solveMatrix(t))
  81. // case _ => NilC()
  82. //
  83. // }
  84. //
  85. // def desugar(e: ExprExt): ExprC = e match {
  86. // case NumExt(n) => NumC(n)
  87. // case PlusExt(e1, e2) => PlusC(desugar(e1), desugar(e2))
  88. // case MultExt(e1, e2) => MultC(desugar(e1), desugar(e2))
  89. // case FdExt(x, e) => FdC(x, desugar(e))
  90. // case AppExt(f, a) => AppC(desugar(f), desugar(a))
  91. // case IdExt(x) => IdC(x)
  92. // case ConsExt(h, t) => ConsC(desugar(h), desugar(t))
  93. // case NilExt() => NilC()
  94. //
  95. // case ListExt(es) =>
  96. // solveList(es)
  97. // case ListMapExt(f, l) =>
  98. // ListMapC(desugar(f), desugar(l))
  99. // case MatrixExt(rs) =>
  100. // solveMatrix(rs)
  101. //
  102. //
  103. //
  104. // //val rowsDesg: List[Rowrs.map(row => desugarRow(row))
  105. // case ScalarMultExt(n, m) =>
  106. // println(desugar(m))
  107. // ListMapC(
  108. // FdC("row",
  109. // // IdC("row") -> Cannot multiply non-number values: (NumV(3),ConsV(NumV(1),ConsV(NumV(2),ConsV(NumV(3),NilV()))))
  110. // ListMapC(FdC("el", MultC(desugar(n), IdC("el"))), IdC("row"))
  111. // ),
  112. // desugar(m))
  113. //
  114. //
  115. // }
  116. //
  117. // }
  118. //
  119. // // import Library._
  120. // //
  121. // // object Desugar {
  122. // //
  123. // //
  124. // // def desugarList(es: List[ExprExt]): ExprC = es match {
  125. // // case h :: t => ConsC(desugar(h), desugarList(t))
  126. // // case h :: Nil => desugar(h)
  127. // // case _ => NilC()
  128. // // }
  129. // //
  130. // // def makeList(rows: List[ExprC]): ExprC = rows match {
  131. // // case rowList :: t => ConsC(rowList, makeList(t))
  132. // // case Nil => NilC()
  133. // // }
  134. // //
  135. // // def solveScalarMult(n: ExprC, m: ExprC): ExprC = m match {
  136. // // case ConsC(h, t) => ConsC(ListMapC(
  137. // // FdC("scalar-mult", MultC(n, IdC("scalar-mult"))), h)
  138. // // , solveScalarMult(n, t))
  139. // // case NilC() => NilC()
  140. // // }
  141. // //
  142. // // def desugar(e: ExprExt): ExprC = e match {
  143. // // case NumExt(n) => NumC(n)
  144. // // case PlusExt(e1, e2) => PlusC(desugar(e1), desugar(e2))
  145. // // case MultExt(e1, e2) => MultC(desugar(e1), desugar(e2))
  146. // // case FdExt(x, e) => FdC(x, desugar(e))
  147. // // case AppExt(f, a) => AppC(desugar(f), desugar(a))
  148. // // case IdExt(x) => IdC(x)
  149. // // case ConsExt(h, t) => ConsC(desugar(h), desugar(t))
  150. // // case NilExt() => NilC()
  151. // //
  152. // // case ListExt(es) =>
  153. // // desugarList(es)
  154. // //
  155. // // case ListMapExt(f, l) =>
  156. // // ListMapC(desugar(f), desugar(l))
  157. // //
  158. // // case MatrixExt(rs) =>
  159. // // val rows: List[ExprC] = rs.map(row => desugarList(row.es))
  160. // // makeList(rows)
  161. // //
  162. // // case ScalarMultExt(n, m) => // solveScalarMult(desugar(n), desugar(m))
  163. // // ListMapC(FdC("x", ListMapC(FdC("y", MultC(desugar(n), IdC("y"))), IdC("x"))), desugar(m))
  164. // // // ListMapC(FdC("x", ListMapC(FdC("mul", MultC(desugar(n), IdC("mul"))))), desugar(m))
  165. // //
  166. // // // desugar(m) match {
  167. // // // case ConsC(h, t) => ConsC(ListMapC(FdC("x", MultC(desugar(n), IdC("x"))), h), desugar(ScalarMultExt(n, t)))
  168. // // // case NilC() => NilC()
  169. // // // }
  170. // //
  171. // //
  172. // //
  173. // // }
  174. // //
  175. // // }
  176. // // //Expected ConsV(ConsV(NumV(3),ConsV(NumV(6),ConsV(NumV(9),NilV()))),ConsV(ConsV(NumV(12),ConsV(NumV(15),ConsV(NumV(18),NilV()))),NilV())),
  177. // // // but got ConsV(ConsV(NumV(3),ConsV(NumV(2),ConsV(NumV(3),NilV()))),ConsV(ConsV(NumV(12),ConsV(NumV(5),ConsV(NumV(6),NilV()))),NilV()))
  178.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement