package Ġxyz . jav ecs . tools . expr Ċ Ċ // Ġhttps :// regex 1 0 1 . com / r / Be A qi 7 / 1 Ċ private Ġval Ġs Pattern Ġ= ĠRegex ("[ a - zA - Z ][ a - zA - Z 0 - 9 ]* \\ s * \\ (\\ s * ([ a - zA - Z ][ a - zA - Z 0 - 9 ]* \\ s *( , \\ s *[ a - zA - Z ][ a - zA - Z 0 - 9 ]*) *) ? \\ s * \\ )") Ċ internal Ġfun Ġvalidate ( signature : ĠString ): ĠPair < String , ĠArray < String >> Ġ{ ĊĠĠĠ Ġif Ġ(! s Pattern . matches ( signature . trim ())) Ġthrow ĠException () ĊĠĠĠ Ġval Ġseparated Ġ= Ġsignature ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" Ġ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (" (", Ġ",", Ġ") ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . isBlank () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġreturn ĠPair ( separated [ 0 ], Ġif Ġ( separated . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġseparated . sub List ( 1 , Ġseparated . size ). to Typed Array () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġempty Array () ĊĠĠĠ Ġ}) Ċ } Ċ Ċ class ĠFunction ( signature : ĠString , Ġval Ġcodes : ĠArray < String >) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcalc Ġ= ĠCalculator () ĊĠĠĠ Ġval Ġname Ġ= Ġvalidate ( signature ). first ĊĠĠĠ Ġval Ġparams Ġ= Ġvalidate ( signature ). second ĊĠĠĠ Ġfun Ġset Environment ( environment : ĠEnvironment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalc . environment Ġ= Ġenvironment ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcall ( args : ĠArray < Double >): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( params . size Ġ!= Ġargs . size ) Ġreturn ĠDouble . NaN ĊĠĠĠĠĠĠĠ Ġcalc . clear () ĊĠĠĠĠĠĠĠ Ġparams . indices . forEach Ġ{ Ġcalc . eval ("${ params [ it ]} Ġ= Ġ${ args [ it ]} ") Ġ} ĊĠĠĠĠĠĠĠ Ġcodes . forEach Ġ{ Ġcalc . eval ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcalc . value . toDouble () ĊĠĠĠ Ġ} Ċ }