Another way a 2-argument function can become 1-argument is to become an OO method, e.g.
global function “void likes(Person, Person)” becomes “class Person { void likes(otherPerson); }”
i.e. the first argument becomes the receiving object.
And this is what people are forgetting—that actions (such as attraction) are not disembodied things, rather there is always a thing that acts. OO makes it impossible to forget this.
Of course, underneath it’s still a 2-argument function—it just takes a hidden parameter. And if your language supports creating delegates/closures; that is, function-context pairs, that’s just the equivalent of partial application as seen above.
Another way a 2-argument function can become 1-argument is to become an OO method, e.g. global function “void likes(Person, Person)” becomes “class Person { void likes(otherPerson); }”
i.e. the first argument becomes the receiving object.
And this is what people are forgetting—that actions (such as attraction) are not disembodied things, rather there is always a thing that acts. OO makes it impossible to forget this.
Of course, underneath it’s still a 2-argument function—it just takes a hidden parameter. And if your language supports creating delegates/closures; that is, function-context pairs, that’s just the equivalent of partial application as seen above.