On Tuesday, September 30, 2003, at 05:35 PM, Phil Bewig wrote:
> 6) Why did you decide to order the arguments to stream-ref as
> (stream-ref index s) instead of (stream-ref s index)? In SRFI-40,
> I struggled quite a while with the proper order of the arguments
> to this function. (stream-ref index s) seems more natural, with
> the index parameter first and the stream last; most functions that
> operate on concrete data types write the parameters first and the
> data-type argument last.
Really? Let me show you a few procedure signatures from R5RS, SRFI 1,
SRFI
13, SRFI 43, and SRFI 44:
; R5RS
(list-ref LIST K)
(list-tail LIST K)
^^^^
(string-ref STRING K)
(string-set! STRING K CHAR)
(substring STRING START END)
(string-fill! STRING CHAR)
^^^^^^
(vector-ref VECTOR K)
(vector-set! VECTOR K OBJ)
(vector-fill! VECTOR K OBJ)
^^^^^^
; SRFI 1
(take LIST I)
(drop LIST I)
(take-right LIST I)
(drop-right LIST I)
(take! LIST I)
(drop-right! LIST I)
(split-at LIST I)
(split-at! LIST I)
(lset-adjoin LIST ELT ...)
(lset-adjoin! LIST ELT ...)
^^^^
; SRFI 13
(string-copy STRING [START END])
(substring/shared STRING START [END])
(string-take STRING I)
(string-drop STRING I)
(string-take-right STRING I)
(string-drop-right STRING I)
(string-pad STRING LEN [CHAR START END])
(string-pad-right STRING LEN [CHAR START END])
(string-trim STRING [CHAR/CHAR-SET/PRED START END])
(string-compare STRING STRING* PROC< PROC= PROC>)
...many more comparison functions...
(string-prefix-length STRING STRING* [START END START* END*])
...also STRING-SUFFIX-LENGTH[-CI], STRING-PREFIX?, etc...
(string-index STRING CHAR/CHAR-SET/PRED [START END])
(string-skip STRING CHAR/CHAR-SET/PRED [START END])
(string-count STRING CHAR/CHAR-SET/PRED [START END])
(string-contains STRING STRING* [START END START* END*])
(string-titlecase STRING [START END])
(string-upcase STRING [START END])
(string-downcase STRING [START END])
(xsubstring STRING FROM [TO START END])
(string-replace STRING STRING* START END [START* END*])
(string-tokenize STRING [TOKEN-SET START END])
(string-filter STRING CHAR/CHAR-SET/PRED [START END])
(string-delete STRING CHAR/CHAR-SET/PRED [START END])
(make-kmp-restart-vector STRING [C= START END])
^^^^^^
; SRFI 43
(vector-copy VECTOR [START [END]])
(vector-resize VECTOR SIZE [FILL])
(vector-binary-search VECTOR VALUE CMP)
(vector-swap! VECTOR I J)
(vector-fill! VECTOR OBJ [START [END]])
(vector-insert! VECTOR I OBJ)
(vector-delete! VECTOR I [OBJ])
(vector-rotate! VECTOR [I])
^^^^^^
; SRFI 44
(collection-count COLLECTION VALUE)
^^^^^^^^^^
(bag-contains? BAG VALUE)
(bag-add[![!]] BAG VALUE)
(bag-insert-left[![!]] BAG VALUE)
(bag-insert-right[![!]] BAG VALUE)
...all the other insertion and mass deletion routines...
...well, you get the idea, and I'm not sure why I've wasted so much time
going through all those SRFIs to name a lot of procedure signatures.
> I don't think there is any particularly right or wrong answer to
> this question, I'm just curious what other people think.
I think it should be (stream-ref STREAM INDEX), especially given what's
in
SRFI 44 for sequences -- (sequence-ref SEQ INDEX [FK]) --.
> Phil