From: José L. T. H. <jos...@gm...> - 2011-02-21 21:48:33
|
Hola: Existe alguna función que sume los elementos de una lista, similar a: (+ 1 2 3) He buscado algo que pueda servir similar a map, pero no lo encuentro. También he pensado escribir la función que sume los elementos de la lista, hasta que este vacía, pero creo que habrá algo más sencillo. Saludos José Luis |
From: Mario R. <bio...@te...> - 2011-02-21 22:48:35
|
El lun, 21-02-2011 a las 22:48 +0100, José Luis Torre Hernández escribió: > Hola: > > Existe alguna función que sume los elementos de una lista, similar a: > > (+ 1 2 3) > > He buscado algo que pueda servir similar a map, pero no lo encuentro. > > También he pensado escribir la función que sume los elementos de la > lista, hasta que este vacía, pero creo que habrá algo más sencillo. apply("+", [1,2,3,4,5,6,7,8,9]); -- Mario |
From: Jaime V. <vi...@fe...> - 2011-02-21 22:54:31
|
On Mon, 2011-02-21 at 22:48 +0100, José Luis Torre Hernández wrote: > Existe alguna función que sume los elementos de una lista, similar a: > > (+ 1 2 3) Esto no te sirve?: (%i8) a:[1,2,3,4,5]; (%o8) [1, 2, 3, 4, 5] (%i9) sum(a[i],i,1,length(a)); (%o9) 15 Saludos, Jaime |
From: José L. T. H. <jos...@gm...> - 2011-02-22 07:29:37
|
El 21 de febrero de 2011 23:54, Jaime Villate <vi...@fe...> escribió: > On Mon, 2011-02-21 at 22:48 +0100, José Luis Torre Hernández wrote: > > Existe alguna función que sume los elementos de una lista, similar a: > > > > (+ 1 2 3) > Esto no te sirve?: > > (%i8) a:[1,2,3,4,5]; > (%o8) [1, 2, 3, 4, 5] > (%i9) sum(a[i],i,1,length(a)); > (%o9) 15 > > Saludos, > Jaime > > > Tengo: aleaBinomial(n,p):=(x:0, for i from 1 thru n do if i=n then return (x) else (if random(1.0)\<less\>p then x:x+1)) ventas:makelist(aleaBinomial(20,0.05), x, 1, diasLaborables) así la siguiente expresión funciona como había pensado sum(ventas[i],i, 1, length(ventas)) sin embargo, lo siguiente no me funciona: apply("+", ventas) proporciona: apply("+", [ 0,1,1,1,2,2,01,0,0,1,0,1,2,0,0,2,0,1,...]) es decir, evalúa la variable ventas, pero no aplica la función. Creo que existe algún tipo de QUOTE y EVAL. He probado con la "tide invertida" que se utiliza en los scripts del shell, pero no me funciona. Muchas gracias por su atención José Luis |
From: Mario R. <bio...@te...> - 2011-02-22 21:02:34
|
Hola, > > Tengo: > > aleaBinomial(n,p):=(x:0, for i from 1 thru n do if i=n then return > (x) > else > (if random(1.0)\<less > \>p then x:x+1)) > > ventas:makelist(aleaBinomial(20,0.05), x, 1, diasLaborables) > También se puede hacer con el paquete distrib: (%i4) display2d:false $ (%i5) load(distrib)$ (%i6) ventas:random_binomial (20,0.05,10); (%o6) [2,0,1,2,1,1,4,1,1,1] > > así la siguiente expresión funciona como había pensado > > sum(ventas[i],i, 1, length(ventas)) > > sin embargo, lo siguiente no me funciona: > > apply("+", ventas) > > proporciona: > > apply("+", [ 0,1,1,1,2,2,01,0,0,1,0,1,2,0,0,2,0,1,...]) > > es decir, evalúa la variable ventas, pero no aplica la función. > > Creo que existe algún tipo de QUOTE y EVAL. He probado con la "tide > invertida" que se utiliza en los scripts del shell, pero no me > funciona. A mi no me da problemas: (%i7) apply("+", ventas); (%o7) 14 Y de hecho, no debería dar problema alguno. Por si fuese de tu interés, para parámetros muestrales, Maxima dispone del paquete descriptive. -- Mario |
From: José L. T. H. <jos...@gm...> - 2011-02-22 10:28:00
|
El 21 de febrero de 2011 23:54, Jaime Villate <vi...@fe...> escribió: > On Mon, 2011-02-21 at 22:48 +0100, José Luis Torre Hernández wrote: > > Existe alguna función que sume los elementos de una lista, similar a: > > > > (+ 1 2 3) > Esto no te sirve?: > > (%i8) a:[1,2,3,4,5]; > (%o8) [1, 2, 3, 4, 5] > (%i9) sum(a[i],i,1,length(a)); > (%o9) 15 > > Saludos, > Jaime > > > Hola a todos: He definido la función: sumaLista(lista):= if lista=[] then return(0) else (return (apply("+", lista))) y proporciona el siguiente mensaje (además de obtener correctamente la suma): `return' not in `block' a pesar de que puedo simplificar la definición de la función ya que puedo definir sumaLista(lista):= apply("+", lista) Me interesaría conocer, para otras ocasiones, a qué se debe el error, qué tipo de corchetes o qué paréntesis me faltan. Atentamente José Luis |
From: Jaime V. <vi...@fe...> - 2011-02-22 14:05:13
|
On Tue, 2011-02-22 at 11:27 +0100, José Luis Torre Hernández wrote: > He definido la función: > sumaLista(lista):= if lista=[] then return(0) else (return > (apply("+", lista))) > > y proporciona el siguiente mensaje (además de obtener correctamente la > suma): > `return' not in `block' En Maxima la función return no tiene el significado que le estás dando. Basta que uses: (%i3) sumaLista(lista):= if lista=[] then 0 else apply("+", lista)$ (%i4) sumaLista([2,3,4]); (%o4) 9 (%i5) sumaLista([]); (%o5) 0 Saludos, Jaime |
From: CARLOS E. C. A. <ca...@un...> - 2011-02-22 15:02:09
|
Jaime Villate <vi...@fe...> skribis, je la 12h5'4" en la 4ª de Ventozo en 163ª [*]: > Basta que uses: > (%i3) sumaLista(lista):= if lista=[] then 0 else apply("+", lista)$ ¿Por qué el rodeo? (%i1) apply("+",[]); (%o1) 0 -- Carlos Enrique Carleos Artime Secretariu Sekretario Departamentu d'Estadística Departemento pri Statistiko ya Investigación Operativa kaj Operaciesploro y Didáutica de la Matemática kaj Didaktiko de Matematiko Universidá Oviedo Universitato Oviedo Principáu d'Asturies Princlando Asturujo Reinu d'España Reĝlando Hispanujo Teléfono: 73353 SMS: +34 66 004 66 05 _____________________________________________________________________________ El cibercorréu nun ye SMS: dispón de | Retpoŝto malsamas ol SMS: - espaciu bastante | - sufiĉas spaco - comodidades amañoses | - taŭgas komfortaĵoj pa espresase correchamente. | por ĝuste sin esprimi. [*] la 22ª de Februaro en 2011ª la 18ª de Rabi-1 en 1432ª ciklo 78, jaro 28 (Xin-Mao), monato 1 (Geng-Yin), tago 20 (Wu-Shen) |
From: José L. T. H. <jos...@gm...> - 2011-02-22 18:30:26
|
2011/2/22 CARLOS Enrique CARLEOS Artime <ca...@un...> > Jaime Villate <vi...@fe...> skribis, > je la 12h5'4" en la 4ª de Ventozo en 163ª [*]: > > > Basta que uses: > > (%i3) sumaLista(lista):= if lista=[] then 0 else apply("+", lista)$ > > ¿Por qué el rodeo? > > (%i1) apply("+",[]); > (%o1) 0 > > > > > -- > Hola a Todos: No existe ninguna razón salvo que first() y rest() parecen funciones más elementales que apply() y un "+" generalizado para listas; un poco por hacerlo como en lisp con CAR y CDR pero con otra sintaxis. sumar(lista):= if lista=[] *then* 0 *else *(first(lista)+sumar(rest(lista))) P.D. Tengo que estudiar el manual para entender el significado del return; yo pensaba que era como en la mayoría de los lenguajes de programación. Saludos José Luis |