|
Allegro CL |
ANSI Common Lisp 1 Introduction 1.4 Definitions 1.4.1 Notational Conventions
1.4.1.5 DesignatorsA designator is an object that denotes another object.Where a parameter of an operator is described as a designator, the description of the operator is written in a way that assumes that the value of the parameter is the denoted object; that is, that the parameter is already of the denoted type. (The specific nature of the object denoted by a "<<type>> designator" or a "designator for a <<type>>" can be found in the Glossary entry for "<<type>> designator.") For example, "nil" and "the value of *standard-output*" are operationally indistinguishable as stream designators. Similarly, the symbol foo and the string "FOO" are operationally indistinguishable as string designators. Except as otherwise noted, in a situation where the denoted object might be used multiple times, it is implementation-dependent whether the object is coerced only once or whether the coercion occurs each time the object must be used. For example, mapcar receives a function designator as an argument, and its description is written as if this were simply a function. In fact, it is implementation-dependent whether the function designator is coerced right away or whether it is carried around internally in the form that it was given as an argument and re-coerced each time it is needed. In most cases, conforming programs cannot detect the distinction, but there are some pathological situations (particularly those involving self-redefining or mutually-redefining functions) which do conform and which can detect this difference. The following program is a conforming program, but might or might not have portably correct results, depending on whether its correctness depends on one or the other of the results:
(defun add-some (x) (defun add-some (x) (+ x 2)) (+ x 1)) ADD-SOME (mapcar 'add-some '(1 2 3 4)) (2 3 4 5) OR(2 4 5 6) In a few rare situations, there may be a need in a dictionary entry to refer to the object that was the original designator for a parameter. Since naming the parameter would refer to the denoted object, the phrase "the <<parameter-name>> designator" can be used to refer to the designator which was the argument from which the value of <<parameter-name>> was computed. |