Re: [Scilab-users] Anonymous functions

2017-01-20 Thread Pierre Vuillemin

Hi Samuel,

Indeed, the behaviour I seek to reproduce is similar to what could be 
done with a global variable. Yet I would avoid to resort to global 
variables.


From what I've understand about variables scoping in Scilab 
(https://wiki.scilab.org/howto/global%20and%20local%20variables), 
variables from the above level are only replaced/copied locally when 
needed, e.g.


function outer()
  a = 1
function inner()
  disp(a) // a has the value of the outer function
  a = 2   // now a copy is made and a is locally equal to 2
endfunction
  inner()
  disp(a) // a has kept its initial value of 1
endfunction


Hence I guess that the fact that a = 1 in the scope of the outer 
function is stored somewhere so that Scilab can retrieve that 
information when needed. I'm wondering how it works internally and 
whether I could use this to create generic lambda function?


I'm aware that this cannot be done solely in Scilab but requires to 
fiddle with the C interface, but I'm curious to experiment.



Regards,

Pierre


Le 17.01.2017 14:21, Samuel Gougeon a écrit :

Le 17/01/2017 11:46, Pierre Vuillemin a écrit :
I have actually implemented a similar solution (in the previous link) 
except that the data are stored in some list. This leads to anonymous 
functions that behaves as in Matlab, i.e. the data of the function is 
instantiated when the function is created.


In python, the value of the data 'a' is instantiated when the function 
is evaluated. Therefore, if the data 'a' changes, the function 
changes.


Here I could make something like

deff('y=f(x)','y = a*x')

but then the function will get the value of the variable 'a' of the 
current namespace, e.g.


a = 1
function outer(x)
 a = 2
 disp(f(1))
endfunction

f(1) // will give 1
outer(1) // will give 2
a = 3
f(1) // will give 3
outer(1) // will give 2

In this example, I would like f(1) to behave identically independently 
of its position.


If i understand correctly your query, the global space is unique and
aims to allow that:
deff('y=f(x)','global a; y = a*x')

This requires the only variable "a" you want to consider been declared
"global a" before some calling point. Actually, i don't see how to
refer to a unique "a" without telling to Scilab which one it must be.

Samuel



___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users

___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users


[Scilab-users] Tcl/Tk

2017-01-20 Thread Oleksiy Bondarenko
Hello,

I am wondering about updating of Tcl/Tk interpreter in SciLab. Scilab is
progressing rapidly, but the version of Tcl/Tk used in it is already
outdated. Does anyone know how to update it manually, or where should I
post the request?

Thank you.
___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users


Re: [Scilab-users] Anonymous functions

2017-01-20 Thread Stefan Du Rietz

Sorry, I left out a line below (a = 2;)

Hello Pierre,
is this too simple?

function outer()
  a = 1
  function inner()
mprintf("a = %i (inner: a has the value of the outer function)\n",a)
a = 2;
a = resume(a);
  endfunction
  inner()
  mprintf("a = %i (outer: a has got its new inner value of 2\n", a)
endfunction

/Stefan


On 2017-01-20 09:00, Pierre Vuillemin wrote:

Hi Samuel,

Indeed, the behaviour I seek to reproduce is similar to what could be
done with a global variable. Yet I would avoid to resort to global
variables.

From what I've understand about variables scoping in Scilab
(https://wiki.scilab.org/howto/global%20and%20local%20variables),
variables from the above level are only replaced/copied locally when
needed, e.g.

function outer()
  a = 1
function inner()
  disp(a) // a has the value of the outer function
  a = 2   // now a copy is made and a is locally equal to 2
endfunction
  inner()
  disp(a) // a has kept its initial value of 1
endfunction


Hence I guess that the fact that a = 1 in the scope of the outer
function is stored somewhere so that Scilab can retrieve that
information when needed. I'm wondering how it works internally and
whether I could use this to create generic lambda function?

I'm aware that this cannot be done solely in Scilab but requires to
fiddle with the C interface, but I'm curious to experiment.


Regards,

Pierre


Le 17.01.2017 14:21, Samuel Gougeon a écrit :

Le 17/01/2017 11:46, Pierre Vuillemin a écrit :

I have actually implemented a similar solution (in the previous
link) except that the data are stored in some list. This leads to
anonymous functions that behaves as in Matlab, i.e. the data of the
function is instantiated when the function is created.

In python, the value of the data 'a' is instantiated when the
function is evaluated. Therefore, if the data 'a' changes, the
function changes.

Here I could make something like

deff('y=f(x)','y = a*x')

but then the function will get the value of the variable 'a' of the
current namespace, e.g.

a = 1
function outer(x)
 a = 2
 disp(f(1))
endfunction

f(1) // will give 1
outer(1) // will give 2
a = 3
f(1) // will give 3
outer(1) // will give 2

In this example, I would like f(1) to behave identically
independently of its position.


If i understand correctly your query, the global space is unique and
aims to allow that:
deff('y=f(x)','global a; y = a*x')

This requires the only variable "a" you want to consider been declared
"global a" before some calling point. Actually, i don't see how to
refer to a unique "a" without telling to Scilab which one it must be.

Samuel



___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users

___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users



___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users


Re: [Scilab-users] Anonymous functions

2017-01-20 Thread Stefan Du Rietz

Hello Pierre,
is this too simple?

function outer()
  a = 1
  function inner()
mprintf("a = %i (inner: a has the value of the outer function)\n", a)
a = resume(a);
  endfunction
  inner()
  mprintf("a = %i (outer: a has got its new inner value of 2\n", a)
endfunction

/Stefan


On 2017-01-20 09:00, Pierre Vuillemin wrote:

Hi Samuel,

Indeed, the behaviour I seek to reproduce is similar to what could be
done with a global variable. Yet I would avoid to resort to global
variables.

From what I've understand about variables scoping in Scilab
(https://wiki.scilab.org/howto/global%20and%20local%20variables),
variables from the above level are only replaced/copied locally when
needed, e.g.

function outer()
  a = 1
function inner()
  disp(a) // a has the value of the outer function
  a = 2   // now a copy is made and a is locally equal to 2
endfunction
  inner()
  disp(a) // a has kept its initial value of 1
endfunction


Hence I guess that the fact that a = 1 in the scope of the outer
function is stored somewhere so that Scilab can retrieve that
information when needed. I'm wondering how it works internally and
whether I could use this to create generic lambda function?

I'm aware that this cannot be done solely in Scilab but requires to
fiddle with the C interface, but I'm curious to experiment.


Regards,

Pierre


Le 17.01.2017 14:21, Samuel Gougeon a écrit :

Le 17/01/2017 11:46, Pierre Vuillemin a écrit :

I have actually implemented a similar solution (in the previous
link) except that the data are stored in some list. This leads to
anonymous functions that behaves as in Matlab, i.e. the data of the
function is instantiated when the function is created.

In python, the value of the data 'a' is instantiated when the
function is evaluated. Therefore, if the data 'a' changes, the
function changes.

Here I could make something like

deff('y=f(x)','y = a*x')

but then the function will get the value of the variable 'a' of the
current namespace, e.g.

a = 1
function outer(x)
 a = 2
 disp(f(1))
endfunction

f(1) // will give 1
outer(1) // will give 2
a = 3
f(1) // will give 3
outer(1) // will give 2

In this example, I would like f(1) to behave identically
independently of its position.


If i understand correctly your query, the global space is unique and
aims to allow that:
deff('y=f(x)','global a; y = a*x')

This requires the only variable "a" you want to consider been declared
"global a" before some calling point. Actually, i don't see how to
refer to a unique "a" without telling to Scilab which one it must be.

Samuel



___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users

___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users


___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users


Re: [Scilab-users] Tcl/Tk

2017-01-20 Thread Samuel Gougeon

Hello,

Le 20/01/2017 10:42, Oleksiy Bondarenko a écrit :

Hello,

I am wondering about updating of Tcl/Tk interpreter in SciLab. Scilab 
is progressing rapidly, but the version of Tcl/Tk used in it is 
already outdated. Does anyone know how to update it manually, or where 
should I post the request?


AFAIK, for the MSWindows distribution, the TCL and Tk main DLLs are 
stored in SCI\bin\tcl85.dll and SCI\bin\tk85.dll, in addition to the 
SCI\bin\tclsci.dll Scilab interface.
A request can be posted on the Scilab bugzilla 
 
page, choosing the TCL component.


HTH
Samuel Gougeon

___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users