For a description of the options used in the following examples, see CodeGenerationOptions.
>
|
|
Translate a simple expression and assign to the name ``w'' in the target code.
>
|
|
w = -2 * x * z + y * z + x
| |
Translate a list and assign to an array with name ``w'' in the target code.
>
|
|
w(0,0) = x
w(0,1) = 2 * y
w(1,0) = 5
w(1,1) = z
| |
Translate a computation sequence. Optimize the input first.
>
|
|
>
|
|
s = 0.10E1 + x
t1 = Log(s)
t2 = Exp(-x)
t = t2 * t1
r = x * t + t2
| |
Declare that x is a float and y is an integer. Return the result in a string.
>
|
|
| (1) |
Translate a procedure. Assume that all untyped variables have type integer.
>
|
f := proc(x, y, z) return x*y-y*z+x*z; end proc:
|
>
|
|
Public Module CodeGenerationModule
Public Function f( _
ByVal x As Integer, _
ByVal y As Integer, _
ByVal z As Integer) As Integer
Return y * x - y * z + x * z
End Function
End Module
| |
Translate a procedure containing an implicit return. A new variable is created to hold the return value.
>
|
f := proc(n)
local x, i;
x := 0.0;
for i to n do
x := x + i;
end do;
end proc:
|
Public Module CodeGenerationModule
Public Function f(ByVal n As Integer) As Double
Dim x As Double
Dim i As Integer
Dim cgret As Double
x = 0.0E0
For i = 1 To n
x = x + CDbl(i)
cgret = x
Next
Return cgret
End Function
End Module
| |
Translate a procedure accepting an Array as a parameter. Note that the indices are renumbered so that the Visual Basic array starts at index 0.
>
|
f := proc(x::Array(numeric, 5..7))
return x[5]+x[6]+x[7];
end proc:
|
Public Module CodeGenerationModule
Public Function f(ByVal x() As Double) As Double
Return x(0) + x(1) + x(2)
End Function
End Module
| |
Translate a module with one exported and one local procedure.
>
|
m := module() export p; local q;
p := proc(x,y) if y>0 then trunc(x); else ceil(x); end if; end proc:
q := proc(x) sin(x)^2; end proc:
end module:
|
>
|
|
Imports System.Math
Public Module m
Public Function p(ByVal x As Double, ByVal y As Integer) As Integer
If (0 < y) Then
Return Fix(x)
Else
Return Ceiling(x)
End If
End Function
Private Function q(ByVal x As Double) As Double
Return Pow(Sin(x), 0.2E1)
End Function
End Module
| |
Translate a linear combination of hyperbolic trigonometric functions.
>
|
|
cg0 = 0.2E1 * Cosh(x) - 0.7E1 * Tanh(x)
| |
Translate a procedure with no return value containing a printf statement.
>
|
f := proc(a::integer, p::integer)
printf("The integer remainder of %d divided by %d is: %d\n", a, p, irem(a, p));
end proc:
|
Public Module CodeGenerationModule
Public Sub f(ByVal a As Integer, ByVal p As Integer)
System.Console.WriteLine("The integer remainder of " & a & " divided by " & p & " is: " & a Mod p)
End Sub
End Module
| |