Hi
I'm new to Oz, coming from Java and other OO languages, and also Prolog.
In page 9 in paragraph "1.5 Functions over lists" in book "Concepts,
Techniques, and Models of Computer Programming,
by PETER VAN ROY and SEIF HARIDI , there is this nice example:
declare
fun {Pascal N}
if N==1 then [1]
else
{AddList
{ShiftLeft { Pascal N-1}}
{ShiftRight {Pascal N-1}}}
end
end
Later, in paragraph "1.7 Complexity" the authors point out that the
complexity of this is exponential, and propose a linear complexity variant :
fun {FastPascal N}
if N==1 then [1]
else L in
L={FastPascal N-1}
{AddList {ShiftLeft L} {ShiftRight L}}
end
end
Now I come to my question. Since the compiler can know that the function
Pascal is declarative and without side-effects, why doesn't it do one of
these :
- 1. warn about the duplicated call {Pascal N-1}
- 2. actually inline the duplicated call in the generate binary output
I would prefer 1. , to encourage a clean code .
I tried to run :
ozc --verbose pascal_triangle.oz
but no warnings were produced .
--
Jean-Marc Vanel
Déductions SARL - Consulting, services, training,
Rule-based programming, Semantic Web
http://jmvanel.free.fr/ - EulerGUI, a turntable GUI for Semantic Web +
rules, XML, UML, eCore, Java bytecode
+33 (0)6 89 16 29 52 -- +33 (0)1 39 55 58 16
_________________________________________________________________________________
mozart-users mailing list
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users