[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: arg-order of test-fn for #'position
- To: info-mcl@cambridge.apple.com
- Subject: Re: arg-order of test-fn for #'position
- From: barmar@nic.near.net (Barry Margolin)
- Date: 5 Nov 1994 16:09:15 -0500
- Full-name: Majordomo Mailing List Server
- Organization: NEARnet, Cambridge, MA
- References: <39g3btEoi1@uni-erlangen.de>
- Sender: owner-info-mcl@cambridge.apple.com
In article <39g3btEoi1@uni-erlangen.de> uhbecker@cip.informatik.uni-erlangen.de (Ulrich Becker) writes:
>I need to find the position of the first item in a list of numbers
>that is smaller than a given number. I thought it might be possible
>to use the position-function for this purpose, using it that way:
>
>(position given-number list-of-numbers :test #'>)
>
>This of course works only if given-number is the first arg and
>the item in list-of-numbers is the second arg passed to the
>test-function (which is true for MCL). My question is: Is this true
>for all CL implementations, or is the ordering of arguments passed
>to the test-function implementation-dependent?
Since your question is about "all CL implementations", wouldn't your
question be more appropriate for comp.lang.lisp than comp.lang.lisp.mcl?
The answer to your question is yes. From p.391 of CLtL2:
You may depend on the order in which arguments are given to <testfn>;
this permits the use of non-commutative test functions in a predictable
manner. The order of the arguments to <testfn> corresponds to the
order in which those arguments (or the sequences containing those
arguments) were given to the sequence function in question. If a
sequence function gives two elements from the same sequence argument to
<testfn>, they are given in the same order in which they appear in the
sequence.
By the way, if this weren't true you could easily solve your original
problem with:
(position-if #'(lambda (x) (> x given-number)) list-of-numbers)
--
Barry Margolin
BBN Internet Services Corp.
barmar@near.net