Uniform Function Call Syntax (UFCS)
jongiddy
jongiddy at gmail.com
Mon Jun 9 02:38:12 EDT 2014
On Monday, 9 June 2014 04:44:22 UTC+1, Chris Angelico wrote:
> This could be solved, though, by having a completely different symbol
> that means "the thing on my left is actually the first positional
> parameter in the function call on my right", such as in your example:
>
> > plus(1, 2) | divide(2)
>
> This would be absolutely identical to:
>
> divide(plus(1, 2), 2)
>
> Maybe you could even make it so that:
>
> plus(1, 2) x=| divide(y=2)
>
> is equivalent to
>
> divide(x=plus(1, 2), y=2)
>
> for the sake of consistency, and to allow the pipeline to inject
> something someplace other than the first argument.
>
> I'm not sure whether it'd be as useful in practice, though. It would
> depend partly on the exact syntax used. Obviously the pipe itself
> can't be used as it already means bitwise or, and this needs to be
> really REALLY clear about what's going on. But a data-flow notation
> would be of value in theory, at least.
Perhaps a pipeline symbol plus an insertion marker would work better in Python:
plus(1, 2) ~ divide(x=^, y=2)
f.readlines() ~ map(int, ^) ~ min(^, key=lambda n: n % 10).str() ~ base64.b64encode(^, b'?-') ~ print(^)
Stdio.read_file("foo.jpg") ~ Image.JPEG_decode(^).autocrop().rotate(0.5).grey() ~ Image.PNG_encode(^) ~ Stdio.write_file("foo.png", ^)
More information about the Python-list
mailing list