Minor but annoying problems with SRFI 146
John Cowan
(20 Jul 2017 02:21 UTC)
|
Re: Minor but annoying problems with SRFI 146 Marc Nieper-Wißkirchen (20 Jul 2017 13:41 UTC)
|
Re: Minor but annoying problems with SRFI 146
John Cowan
(20 Jul 2017 15:37 UTC)
|
Re: Minor but annoying problems with SRFI 146
Marc Nieper-Wißkirchen
(20 Jul 2017 15:52 UTC)
|
Re: Minor but annoying problems with SRFI 146
John Cowan
(20 Jul 2017 16:23 UTC)
|
Re: Minor but annoying problems with SRFI 146
Arthur A. Gleckler
(20 Jul 2017 17:32 UTC)
|
Thanks, John. Am 20.07.2017 um 04:20 schrieb John Cowan: > The index has mapping-comparator but not make-mapping-comparator. Fixed. > The body text makes comparator? an exported identifier, but I see no > reason why it should be exported. If you want it, import (srfi 128). It is not harmful either. But it helps to detect if an implementation of the R7RS library is broken in the sense that it does not allow interdependent libraries. If a program imports as follows (import (srfi 128) (srfi 146)), it would be an error (detectable at expansion time) if the Scheme system loaded (srfi 128) twice, once for importing into the program, and once for importing into (srfi 146). Namely, in that case the main program would import comparator? with two different bindings. If (srfi 146) didn't export comparator?, multiple loadings of (srfi 128) would not be detected early; only when a (srfi 146) procedure is executed with a comparator defined in the main program and coming from the other loading of (srfi 128). See this post of mine: https://groups.google.com/d/msg/scheme-reports-wg2/NZA9CIMRl48/CJ4Xn27CAwAJ. And the preceding and following discussion. (One may view exporting comparator? as a hack only necessary because the R7RS library system omits to say anything about interdependent library (which we use everywhere when implementing SRFIs for R7RS-large); one can, however, also make independently sense out of it: By exporting comparator?, (srfi 146) declares or announces what the type is, its procedures depend on.) > In the definition of mapping-pop, for "an arbitrary (but see below) > association" read "the association with the least key". The second > paragraph should read "The hashmap-pop procedure returns an arbitrary > association." > > In the definition of mapping-search, for "is searched" read "is > searched in the order of the stored keys". Change the second > paragraph to "The hashmap-search procedure searches in arbitrary order." > > In the definition of mapping-find, for "arbitrarily chosen > association" read "the association with the least key". Change the > second paragraph to "The hashmap-find procedure searches in arbitrary > order." > > In the definition of mapping-keys, for "all the keys" read "all the > keys in increasing order". Change the second paragraph to "The > hashmap-keys procedure returns the keys in arbitrary order." > > In the definition of mapping-values, for "all the values" read "all > the values in increasing order of the keys". Change the second > paragraph to "The hashmap-keys procedure returns the values in > arbitrary order." > > In the definition of mapping-entries for "The two lists" read "in > increasing order of the keys. The hashmap-entries procedure returns > the two lists". Drop the second paragraph. > > In the definitions of mapping-map, mapping-for-each, mapping-fold: for > "in arbitrary order (but see below)" read "in increasing order of the > keys". Change the last paragraph to "The <whichever> procedure > processes the associations in arbitrary order." > > In the definition of mapping-map->list, for "for every association" > read "for every association in increasing order of the keys". Change > the second paragraph to "The hashmap-map->list procedure processes the > associations in arbitrary order." > > In the definition of mapping->alist, for "in unspecified order" read > "in increasing order of the keys". Change the second paragraph to > "The hashmap->alist procedure processes the associations in arbitrary > order." > In the definitions of mapping/ordered and mapping-unfold/ordered, the > words "if they are imported from (srfi 146)" are now superfluous. It > is still an error to create a hashmap from unordered input in this > function, though the error will probably not be caught. This seems to be a meta-issue. In the paragraph preceding the index, it says (in HTML): "<p>To make it possible for a program to easily import <code>(srfi 146)</code> and <code>(srfi 146 hash)</code> at the same time, the prefix <code>mapping</code> that prefixes the identifiers in <code>(srfi 146)</code> is substituted by <code>hashmap</code> in <code>(srfi 146 hash)</code>. For example, <code>mapping</code> becomes <code>hashmap</code>, <code>mapping?</code> becomes <code>hashmap?</code>, and <code>mapping-ref</code> becomes <code>hashmap-ref</code>. <code>comparator?</code> remains unchanged. For simplicity, the rest of this SRFI refers to the identifiers by their names in <code>(srfi 146)</code>. </p>" This is why you won't find the prefix "hashmap-" anywhere else. I wanted to keep the question of naming/prefixing the procedures independently to the semantical descriptions of what the procedures do. So in some sense, the identifiers defined are "meta-identifiers", standing either for the corresponding identifier as exported from (srfi 146) or as exported from (srfi 146 hash). I think, at least logically, the SRFI says exactly what you want it to say. If not, please reply. Marc