[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: pathnames.
Date: Friday, October 11, 1985 08:53:50
From: schumacher%hplabs.csnet@CSNET-RELAY.ARPA
Date: Thu, 10 Oct 85 20:42 EDT
From: "David C. Plummer" <hplabs!DCP%scrc-quabbin.arpa@CSNET-RELAY>
Date: Thu 10 Oct 85 16:06:07-PDT
From: SCHUMACHER%hplabs.csnet@CSNET-RELAY.ARPA
The manual doesn't state explicitly that the accessor functions for
pathname objects are setf'able. Is this an oversight on my part, the
manuals part, or is there some justification for this. Admittedly the
desired effect can be achieved using make-pathname with the current
pathname as the :default and the desired change specified as a keyword
arg, but this seems sort of strange ...
Symbolics interns our pathnames. Is SYMBOL-NAME setf'able?
I'm not sure I understand this statement (question?). Are you interning
the namestring of the pathname ? Perhaps I should have been more specific:
given a path name (setq foo (pathname "<dir>foo.bar")) I want to change the
type field of pathname foo to be "jnk". Is it legal cl to say
(setf (pathname-type foo) "jnk") ? If this isn't legal then it seems that
the only way to do this is (setq foo (make-pathname :type "jnk" :defaults foo)).
Is that any clearer ?
Perhaps I can clarify. In Common Lisp it is not legal to change the components
of a pathname, for the same reasons that it is not legal to change the name of
a symbol and not legal to change the denominator of a ratio.
In Symbolics' implementation, every time you ask for a pathname with the same
components, you get the same object, so that pathname equality can be tested
with EQ. This is what DCP was pointing out. However, this is irrelevant.
Even in a system that didn't "intern" or "canonicalize" pathnames in this way,
it would be inappropriate to perform side-effects on a pathname because it
might be in use by someone else. That's the basis for the language design;
unfortunately it isn't explained in the manual. You're correct that the way
to get a pathname that is like another pathname but with one component different
is to call make-pathname.