equal
deleted
inserted
replaced
112 |
112 |
113 \solution{ |
113 \solution{ |
114 Scala cannot generate jumps in between different methods (to which functions are compiled to). So cannot eliminate the tail-calls. Haskell for example can do this because it compiles the code in a big ``blob'' inside a main-method (similar to the WHILE language). |
114 Scala cannot generate jumps in between different methods (to which functions are compiled to). So cannot eliminate the tail-calls. Haskell for example can do this because it compiles the code in a big ``blob'' inside a main-method (similar to the WHILE language). |
115 } |
115 } |
116 |
116 |
|
117 \item The JVM method given below is code for the following recursive function |
|
118 |
|
119 \begin{lstlisting}[numbers=none] |
|
120 def add(x, y) = if x == 0 then y else add(x - 1, y + 1) |
|
121 \end{lstlisting} |
|
122 |
|
123 Rewrite the JVM code such that the recursive call at the end is removed. |
|
124 |
|
125 \begin{lstlisting}[language=JVMIS,numbers=none] |
|
126 .method public static add(II)I |
|
127 .limit locals 2 |
|
128 .limit stack 7 |
|
129 iload 0 |
|
130 ldc 0 |
|
131 if_icmpne If_else_4 |
|
132 iload 1 |
|
133 goto If_end_5 |
|
134 If_else_4: |
|
135 iload 0 |
|
136 ldc 1 |
|
137 isub |
|
138 iload 1 |
|
139 ldc 1 |
|
140 iadd |
|
141 invokestatic defs/defs/add(II)I ;; recursive call |
|
142 If_end_5: |
|
143 ireturn |
|
144 .end method |
|
145 \end{lstlisting} |
|
146 |
|
147 \solution{ |
|
148 \begin{lstlisting}[language=JVMIS,numbers=none] |
|
149 .method public static add(II)I |
|
150 .limit locals 2 |
|
151 .limit stack 7 |
|
152 add2_Start: |
|
153 iload 0 |
|
154 ldc 0 |
|
155 if_icmpne If_else_4 |
|
156 iload 1 |
|
157 goto If_end_5 |
|
158 If_else_4: |
|
159 iload 0 |
|
160 ldc 1 |
|
161 isub |
|
162 iload 1 |
|
163 ldc 1 |
|
164 iadd |
|
165 istore 1 |
|
166 istore 0 |
|
167 goto add2_Start |
|
168 If_end_5: |
|
169 ireturn |
|
170 .end method |
|
171 \end{lstlisting} |
|
172 } |
|
173 |
117 |
174 |
118 \item Explain what is meant by the terms lazy evaluation and eager |
175 \item Explain what is meant by the terms lazy evaluation and eager |
119 evaluation. |
176 evaluation. |
120 |
177 |
121 \solution{ Lazy evaluation only evaluates expressions when they are |
178 \solution{ Lazy evaluation only evaluates expressions when they are |