#----------------------------- if (string eparse (var Int i)) # is an integer -> i else # is not #----------------------------- if (string eparse (var Float f)) # is a float -> f else # is not #----------------------------- function is_numeric s -> ok arg Str s; arg Bool ok ok := s eparse (var Int i) #----------------------------- |
#----------------------------- var Float unrounded := 0.255 var Float rounded := (cast unrounded*100 Int)/100 console "Unrounded: " unrounded eol "Rounded: " rounded eol Unrounded: 0.255 Rounded: 0.26 #----------------------------- |
#----------------------------- function dec2bin i -> s arg Int i; arg Str s s := string i "radix 2" var Str binstr := dec2bin 54 # binstr is "110110" #----------------------------- |
#----------------------------- for (var Int i) X Y # i is set to every integer from X to Y, inclusive for (var Int i) X Y step 7 # i is set to every integer from X to Y, stepsize = 7 #----------------------------- print "Childhood is: "; for (var Int i) 5 12 console i " " console eol Childhood is: 5 6 7 8 9 10 11 12 #----------------------------- |
#----------------------------- module "/pliant/math/functions.pli" function deg2rad d -> r arg Float d r return d/180*pi function rad2deg r -> d arg Float r d return r/pi*180 #----------------------------- radians := deg2rad degrees degrees := rad2deg radians #----------------------------- function degree_sine d -> s arg Float d s s := sin deg2rad:d #----------------------------- |
#----------------------------- f := tan 3.7 f := acos 3.7 # returns undefined f := acos 0.2 f := tan (pi/2) # actualy returns 1.63317787284e16 #----------------------------- |
#----------------------------- log_e := log value #----------------------------- function log_base base value -> l arg Float base value l return log:value/log:base #----------------------------- # log_base defined as above answer := log_base 10 10000 #----------------------------- |
#----------------------------- module "/pliant/language/compiler.pli" module "/pliant/language/parser.pli" type Complex field Float real imaginary # define type function 'cast Complex' f -> z # extension cast Float -> Complex arg Float f; arg Complex z extension z real := f z imaginary := 0 function 'cast Float' z -> f # reduction cast Complex -> Float arg Float f; arg Complex z reduction if z:imaginary<>0 error error_id_arithmetic "The value is not a real number" else f := z real # # Define a parser for notation like 3i. i will not be valid, 1i will be. # function parse_imaginary context line parameter arg_rw ParserContext context ; arg Str line ; arg Address parameter if not (line parse (var Float data) word:"i" offset:(var Int offset)) return var Link:Complex z :> new Complex z real := 0 z imaginary := data context add_token addressof:z context forward offset gvar ParserFilter img_filter img_filter function :> the_function parse_imaginary ParserContext Str Address constant 'pliant parser basic types' img_filter export 'pliant parser basic types' # basic functions on complex numbers function '+' z1 z2 -> z arg Complex z1 z2 z z real := z1:real+z2:real z imaginary := z1:imaginary+z2:imaginary function '-' z1 z2 -> z arg Complex z1 z2 z z real := z1:real-z2:real z imaginary := z1:imaginary-z2:imaginary function '*' z1 z2 -> z arg Complex z1 z2 z z real := z1:real*z2:real-z1:imaginary*z2:imaginary z imaginary := z1:real*z2:imaginary+z2:real*z1:imaginary # how to write it method z 'to string' options -> s arg Complex z ; arg Str options ; arg Str s if z:imaginary=0 return (string z:real) eif z:real=0 return (string z:imaginary)+"i" return (string z:real)+"+"+(string z:imaginary)+"i" #------------------------- var Complex c := a * b #------------------------- var Complex a := 3+5i var Complex b := 2-2i c := a*b console "c = " c eol c = 16+4i #------------------------- var Link:Complex za :> new Complex 3+5i var Link:Complex zb :> new Complex 2-2i var Link:Complex zc :> new Complex zc := za * zb console "c = " zc eol c = 16+4i #------------------------- |