First-class functions/Use numbers analogously: Difference between revisions

Line 1,111:
 
=={{header|zkl}}==
<lang zkl>var x:=2.0;, y:=4.0;, z:=(x+y;), c:=T(x,y,z).apply(fcn(n){ T(n,1.0/n) });
//-->L(L(2,0.5),L(4,0.25),L(6,0.166667))</lang>
<lang zkl>fcn multiplier(n1,n2){ return('*.fp(n1,n2)) }</lang>
This is actually partial evaluation, multiplier returns n1*n2*X where X isn't known yet. So multiplier(2,3)(4) --> (2*3*)4 --> 24. Even better, multiplier(2,3)(4,5) --> 120, multiplier(2,3)(4,5,6) --> 720, multiplier(2,3)() --> 6.
 
Alternatively,
<lang zkl>fcn multiplier(n1,n2){ fcn(n,X){ n*X }.fp(n1*n2) }</lang>
<lang zkl>var ms:=c.apply(fcn([(n1,n2)]){multipler multiplier(n1,n2) });
//-->L(Deferred,Deferred,Deferred) // lazy eval of n*(1/n)*X
ms.run(True,1.0) //-->L(1,1,1)
ms.run(True,5.0) //-->L(5,5,5)
ms.run(True,0.5) //-->L(0.5,0.5,0.5)</lang>
List.run(True,X), for each item in the list, does i(X) and collects the results into another list. Sort of an inverted map or fold.
 
{{omit From|C}}
Anonymous user