On Sun, May 24, 2020 at 06:31:46PM -0400, David Mertz wrote:
I think one thing that pulls in different directions is that both composition and piping are useful, and do something closely related. But in one the data "goes" forward and in the other the data "goes backward."
The same rule applies to function application though.
I use bash a lot, and writing something like this is common:
cat data | sort | cut -d; -f6 | grep ^foo | sort -r | uniq -c
And today's "Useless Use Of cat Award" goes to... :-) sort data | ... (What is it specifically about cat that is so attractive? I almost certainly would have done exactly what you did, even knowing that sort will take a file argument.)
My data is moving left to right through the operations. In contrast, I might write in some hypothetical programming language:
myfilter = uniq[count] ∘ sort[reverse] ∘ grep[^foo] ∘ cut[;,f6] ∘ sort result = myfilter(data)
Compared to the regular old function call syntax: uniq(sort(grep(cut(sort(data))))) (ignoring extra arguments) where the data still moves right to left. On the third hand, even if your language doesn't have pipes, it may have methods: data.sort().cut().grep().sort().uniq() which now moves left to right again. -- Steven