In attachment the unified diff of the two lisp files generated, the first with precise signatures, the second uses R in signatures.
Le dim. 22 déc. 2024 à 01:58, Grégory Vanuxem <[email protected]> a écrit : > > Hello folks, > > I am coding a sample package that performs operations on 32bit or > 64bit floats using my Julia interface (using libjulia). > > I wonder what is the best way to do it, I can use parameterized > signatures or more generically via a parameterized package. The latter > is not really necessary. > Here is a sample with a parameterized package: > > JuliaMachineFloatFunctions(R : JuliaMachineFloat) : > Exports == Implementation where > JF32 ==> JuliaFloat32 > JF64 ==> JuliaFloat64 > STR ==> String > Exports ==> with > jlApplyFunction : (STR, R) -> R > ++ jlApplyFunction(func,x) > jlApplyFunction : (STR, R, R) -> R > ++ jlApplyFunction(func,x,y) > jlApplyFunction : (STR, R, R, R) -> R > ++ jlApplyFunction(func,x,y,z) > > Implementation ==> add > import from String > if R is JF64 then > jlApplyFunction(func,a) == > jl_dbl_function_dbl(func,a)$Lisp > jlApplyFunction(func,a, b) == > jl_dbl_function_dbl_dbl(func,a,b)$Lisp > jlApplyFunction(func,a, b, c) == > jl_dbl_function_dbl_dbl_dbl(func,a,b,c)$Lisp > else -- R is JF32 > jlApplyFunction(func,a) == > jl_flt_function_flt(func,a)$Lisp > jlApplyFunction(func,a, b) == > jl_flt_function_flt_flt(func,a,b)$Lisp > jlApplyFunction(func,a, b, c) == > jl_flt_function_flt_flt_flt(func,a,b,c)$Lisp > > But I can of course do not parametrize the package and use signatures like: > > jlApplyFunc : (STR, JF64) -> JF64 > or > jlApplyFunc : (STR, JF32) -> JF32 > > and in the implementation: > jlApplyFunction(func, a : JF64) == > jl_dbl_function_dbl(func,a)$Lisp > etc. > > They are replaced (inlined) by the Lisp calls for the two coding styles. > > Example with the parameterized package above (Julia needs to perform > some initialization tasks at first call): > > (1) -> a:=jf64(2) > > (1) 2.0 > Type: JuliaFloat64 > Time: 4.03 (OT) = 4.03 sec > (2) -> b:=jf32(2) > > (2) 2.0 > Type: JuliaFloat32 > Time: 0.02 (OT) = 0.02 sec > (3) -> jlApplyFunction("sqrt",a) > > (3) 1.4142135623730951 > Type: JuliaFloat64 > Time: 0.02 (EV) = 0.03 sec > (4) -> jlApplyFunction("sqrt",b) > > (4) 1.4142135 > Type: JuliaFloat32 > Time: 0.01 (EV) = 0.01 sec > (5) -> % pretend SEX > > (5) 1.4142135f0 > Type: SExpression > Time: 0 sec > > Any idea of the "best" way to do this? And the advantages and/or > inconveniences of those two coding styles? > > - Greg -- You received this message because you are subscribed to the Google Groups "FriCAS - computer algebra system" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/fricas-devel/CAHnU2dazqWqRLwzOPdEBV3bi0h3ZY-p2C2MejXxKDDWskHztxg%40mail.gmail.com.
JMFF.diff
Description: Binary data
