From: Paul K. <pki...@ja...> - 2002-08-10 20:04:42
|
Sure. Add it to octave forge. I simplified the while loop a bit, and let you use a default parameter of "x". I wouldn't go much beyond this in terms of compatibility --- too many assumptions required about what makes a variable and what order the variables should go in. Maybe inline(expr,n) as shorthand for inline(expr,"x","P1","P2",...,"Pn") is useful. Paul Kienzle pki...@us... On Sat, Aug 10, 2002 at 06:37:46PM +0100, Etienne Grossmann wrote: > > Sorry, there was a part missing from the first attached func. Try > the following. > > Etienne > > On Sat, Aug 10, 2002 at 01:32:42PM +0000, Steffan Berridge wrote: > # > # Hi, > # > # I have just started using Octave, having used Matlab for a > # while. In Matlab I have often used inline functions, they > # are very convenient for example when passing a function as > # an argument. > # > # For example, the following is a function returning the > # square of the argument: > # > # fun = inline('x^2','x'); > # > # One can then pass this function as an argument to another > # function: > # > # x = foo(fun,...); > # > # So my question is, is there an equivalent construction in > # Octave? If not, what is the best way to pass functions as > # arguments? > # > # Thanks, > # Steffan > -- > Etienne Grossmann ------ http://www.isr.ist.utl.pt/~etienne ## [fname,fcode] = inline (str,arg1,...) - Define a function from a string ## ## INPUT : ----------- ## str : string : String defining the result of the function ## argN : string(s) : Names of the arguments of the function ## ## OUTPUT : ---------- ## fname : string : Name of the new function, which can e.g. be called w/ ## feval() ## fcode : string : The code of the function ## ## EXAMPLE : --------- ## ## fn = inline ("x.^2 + 1","x"); ## feval (fn, 6) ## ans = 36 ## function [fname,fcode] = inline (str,varargin) ## Choose a name (naive way : won't work zillions of times) while 1 fname = sprintf ("inline_func_%06i",floor (rand()*1e6)); if exist (fname), break; end end ## construct arg list if nargin == 1 argstr = "x"; else argstr = sprintf ("%s,",all_va_args); argstr = argstr(1:length(argstr)-1); end fcode = sprintf (["function r = %s (%s)\n",\ " r = ",str,";\n",\ "endfunction;"],\ fname, argstr); eval (fcode); endfunction |