[LISPWORKS][Common Lisp HyperSpec (TM)] [Previous][Up][Next]


Issue RANGE-OF-START-AND-END-PARAMETERS Writeup

Issue:        RANGE-OF-START-AND-END-PARAMETERS

References: COUNT (p257), COUNT-IF (p257), COUNT-IF-NOT (p257),

DELETE (p257), DELETE-DUPLICATES (p254), DELETE-IF (p254),

DELETE-IF-NOT (p254), FILL (p252), FIND (p257), FIND-IF (p257),

FIND-IF-NOT (p257), MAKE-STRING-INPUT-STREAM (p330),

MISMATCH (p257), NSTRING-CAPITALIZE (p304),

NSTRING-DOWNCASE (p304), NSTRING-UPCASE (p304), SUBSTITUTE (p255),

NSUBSTITUTE-IF (p256), NSUBSTITUTE-IF-NOT (p256),

PARSE-INTEGER (p381), PARSE-NAMESTRING (p414), POSITION (p257),

POSITION-IF (p257), POSITION-IF-NOT (p257),

READ-FROM-STRING (p381), REDUCE (p251), REMOVE (p253),

REMOVE-DUPLICATES (p254), REMOVE-IF (p253), REMOVE-IF-NOT (p253),

REPLACE (p252), SEARCH (p258), STRING-CAPITALIZE (p303),

STRING-EQUAL (p301), STRING-DOWNCASE (p303), STRING-GREATERP (p302),

STRING-LESSP (p302), STRING-NOT-EQUAL (p302),

STRING-NOT-GREATERP (p302), STRING-NOT-LESSP (p302),

STRING-UPCASE (p303), STRING/= (p301), STRING< (p301),

STRING<= (p301), STRING= (p300), STRING> (p301), STRING>= (p301),

SUBSEQ (p248), SUBSTITUTE (p255), SUBSTITUTE-IF (p255),

SUBSTITUTE-IF-NOT (p255), WRITE-LINE (p384), WRITE-STRING (p384)

Category: CLARIFICATION

Edit history: 14-Sep-88, Version 1 by Pitman

Problem Description:

CLtL is not always clear about the possible values which the START and END

parameters of built-in Common Lisp can take.

Proposal (RANGE-OF-START-AND-END-PARAMETERS:INTEGER-AND-INTEGER-NIL):

Clarify that for functions permitting a parameter named START, START1,

or START2 which delimits the beginning point in a sequence to be

considered for some operation, that paremeter must be a non-negative

integer. If the argument is optional or key (as is the case for all

functions referenced above except SUBSEQ), the value will default to

0 if not supplied. It is not permissible to pass NIL as this argument.

Clarify that for functions permitting a parameter named END, END1,

or END2 which delimits the end point in a sequence to be considered

for some operation, that paremeter must be a non-negative integer

indicating a termination point or NIL indicating the last element

in the sequence. If the argument is optional or key (as is the case

for all functions referenced above), the value will default to NIL

if not supplied. Supplying NIL is, therefore, equivalent to not

supplying this argument.

Test Case:

(SEARCH "F" "FOO" :START1 NIL) is an error.

(SEARCH "F" "FOO" :START2 0) is permissible and is equivalent to

(SEARCH "F" "FOO")

(SEARCH "F" "FOO" :END2 NIL) is permissible and is equivalent to

(SEARCH "F" "FOO")

Rationale:

To keep data flow between programs from becoming excessively complicated,

it's a good idea to specify what the default values are so that they can

be passed explicitly rather than requiring an alternate calling sequence

for all possible cases where the value might need to default.

Current Practice:

Symbolics Genera implements the proposed behavior.

Cost to Implementors:

Hopefully most implementations already do this. Those that do not will

probably have to make quite a number of small changes to both the code

for these functions and to any associated compiler optimizers.

Cost to Users:

This change is upward compatible with existing user code. Any program

which did not conform to this proposal was already not portable.

Cost of Non-Adoption:

Subtle gratuitous differences in the handling of these arguments would

continue to be a possibility and a barrier to portability.

Benefits:

The language would be more regular and well-defined.

Aesthetics:

If it makes things clearer, it's an improvement.

Discussion:

Pitman supports RANGE-OF-START-AND-END-PARAMETERS:INTEGER-AND-INTEGER-NIL.


[Starting Points][Contents][Index][Symbols][Glossary][Issues]
Copyright 1996-2005, LispWorks Ltd. All rights reserved.