>>> [s for i in range(50) if i&1 and (s:=i*i) < 50]
[1, 9, 25, 49]
And here's my interpretation of the C equivalent: #include <stdio.h>
int main() {
int i, s;
for(i = 1; i <= 10; i++) {
if (i & 1 && (s = i*i) < 50) {
printf("%d ", s);
}
}
return 0;
}
Not quite a-la 1972, but then again the example 1972 code from that page wouldn't compile then either - variables had to be declared at the start of the function.I wonder what the APL looks like. I hacked this solution:
(x<50)/x←(1=2|x)/x←((⍳10)*2)
but I'm guessing the real solution would be 1/3 the size. {⍵/⍨⍵<50}{2*⍨⍵/⍨1=2|⍵}⍳10
1 9 25 49
About as short as I can make it, and while its longer than the pandas solution, the primitives are significantly more general (sqr, odd - why include these as language primitives?).As to your "why" question - I'm assuming to make a neat demo. Something like:
>>> from math import cos, sin
>>> [s for i in range(50) if i&1 and cos(s:=i*i) < sin(i)]
[1, 9, 49, 225, 361, 441, 625, 1089, 1521, 1681, 2025, 2209]
seems more difficult to pull off in a pipeline API.one of many possible solutions:
{(1○⍺)>2○⍵} {(⍹ ⍵)/⍨⍵ ⍶ ⍹ ⍵} {⍵*2} {⍵/⍨2|⍵}⍳50
1 9 49 225 361 441 625 1089 1521 1681 2025 2209 (1..10).select(&:odd?).map{|x| x*x }.select{|x| x < 50 }