Python ermöglicht es, mehrere Generatoren:
>>> [(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)]
Und auch Einschränkungen:
>>> [(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)]
aktualisieren: Javascripts Syntax ist ähnlich (Ergebnisse von m mit der javascript shell auf 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]]
(Aus irgendeinem Grund, etwas über den Zusammenhang Sachen in der Javascript-Shell erfordert die eval indirection ausgewertet, um Listenkomprehensionen zu haben arbeiten. Javascript innerhalb eines <script>
Tag erfordert nicht, dass, natürlich)
Kühl. Jetzt braucht Python nur Pattern-Matching in Generatoren. Und Verallgemeinerungen jenseits von Sequenzen zu anderen Monaden zu verallgemeinern. Und äh - ein Typerchecker. :) – RD1
Nein. Python ist nicht Haskell. Typprüfung ist gegen die Philosophie von Python. –
Nach dem, was ich gelesen habe, wurde die optionale statische Typprüfung ernsthaft für Python in Betracht gezogen, bevor sie zurückgewiesen wurde. Also, ich glaube nicht, dass es so viel gegen die Philosophie sein kann. Und Geschichte sagt uns, dass Sprachen wie Lisp ohne Typ Checker nicht gut skalieren, auch mit Unit-Tests. Persönlich fällt es mir schwer, meinen Schülern beizubringen, wenn sie sich nicht auf die IDE verlassen können, um die Arten von Dingen zu verstehen - statische Typen machen das Programmieren so viel einfacher, wenn man lernt, mit einer guten IDE zu programmieren. – RD1