RosettaCodeData/Task/First-class-functions/M2000-Interpreter/first-class-functions.m2000

31 lines
934 B
Plaintext

Module CheckFirst {
RAD = lambda -> number/180*pi
ASIN = lambda RAD -> {
Read x : x=Round(x,10)
If x>=0 and X<1 Then {
=RAD(abs(2*Round(ATN(x/(1+SQRT(1-x**2))))))
} Else.if x==1 Then {
=RAD(90)
} Else error "asin exit limit"
}
ACOS=lambda ASIN (x) -> PI/2 - ASIN(x)
POW3 = Lambda ->number**3
POW3INV =Lambda ->number**(1/3)
COSRAD =lambda ->Cos(number*180/pi)
SINRAD=lambda ->Sin(number*180/pi)
Composed=lambda (f1, f2) -> {
=lambda f1, f2 (x)->{
=f1(f2(x))
}
}
Dim Base 0, A(3), B(3), C(3)
A(0)=ACOS, ASIN, POW3INV
B(0)=COSRAD, SINRAD, POW3
C(0)=Composed(ACOS, COSRAD), Composed(ASIN, SINRAD), Composed(POW3INV, POW3)
Print $("0.00")
For i=0 To 2 {
Print A(i)(B(i)(.5)), C(i)(.5)
}
}
CheckFirst