Python permite que varios generadores:
>>> [(x,y,x*y) for x in range(1,5) for y in range(1,5)]
[(1, 1, 1), (1, 2, 2), (1, 3, 3), (1, 4, 4),
(2, 1, 2), (2, 2, 4), (2, 3, 6), (2, 4, 8),
(3, 1, 3), (3, 2, 6), (3, 3, 9), (3, 4, 12),
(4, 1, 4), (4, 2, 8), (4, 3, 12), (4, 4, 16)]
Y también Restricciones:
>>> [(x,y,x*y) for x in range(1,5) for y in range(1,5) if x*y > 8]
[(3, 3, 9), (3, 4, 12), (4, 3, 12), (4, 4, 16)]
Actualizar: JavaScript de la sintaxis es similar (resultados para m utilizando la javascript shell en Firefox):
var nums = [1, 2, 3, 21, 22, 30];
var s = eval('[[i,j] for each (i in nums) for each (j in [3,4]) if (i%2 == 0)]');
s.toSource();
[[2, 3], [2, 4], [22, 3], [22, 4], [30, 3], [30, 4]]
(Por alguna razón, algo sobre la materia contexto se evalúa en la cáscara de JavaScript requiere el direccionamiento indirecto eval para tener listas por comprensión funcionan. Javascript dentro de una etiqueta <script>
no requiere que, por supuesto)
Cool. Ahora, todas las necesidades de Python son coincidencia de patrones en generadores. Y generalizar las comprensiones más allá de las secuencias a otras mónadas. Y er - un Typerchecker. :) – RD1
No. Python no es Haskell. La verificación de tipos está en contra de la filosofía de python. –
Según lo que he leído, la comprobación de tipo estático opcional se consideró seriamente para Python durante un tiempo antes de ser rechazada. Entonces, no creo que pueda ser tan contrario a la filosofía. Y la historia nos dice que los lenguajes como Lisp sin tipo de comprobadores no escalan bien, incluso con pruebas unitarias. Personalmente, me resulta difícil enseñar a mis alumnos cuando no pueden confiar en el IDE para comprender el tipo de cosas: los tipos estáticos hacen que la programación sea mucho más fácil cuando se aprende a programar con un buen IDE. – RD1