On Mon, Oct 21, 2019 at 1:47 AM Marc Nieper-Wißkirchen <xxxxxx@nieper-wisskirchen.de> wrote:

For example:

(map f ls reverse: #t foo: 42)

Here, `f' shall be called with the list item and the keyword argument
`foo:' bound to `42'. However, how can `map' whether to pass down a
keyword argument `reverse:' to `foo:' or whether to change its own
behavior?

I've already answerd to such case, but allow me to repeat.

It is your map's API that you "reserve" reverse: keyword.  If you want to allow arbitrary keyword arguments
to be passed to f, you let map take, for example, extra-keywords: argument, which takes keyword-value
list to be passed to 'f'.

By the way, this reverse: is a good example of my point.  You developed (your map) library
with reverse: keyword, and export map and reverse:.

Now, suppose I develop (my scan) library, which maps f over each pair in the spine of the list.
And I added reverse: keyword argument which returns the result reversed; it is a natural choice
even I don't know about (your map) library.

A user finds your map and my scan both takes reverse: keyword and wanted to abstract it.
But alas, two revese:'s are different identifiers.  So he ask you and me to rewrite our libraries
to share reverse: keyword from a common library.  Where to put such common library and
who'll maintain it?  Well, the user don't care, and you and I have to talk to resolve it.

I anticipate this scenario to be very common. Will this scale?