[detailed discussion of my examples deleted for brevity]
First of all thanks for taking the time for such a detailed answer. I get the feeling that this thread might finally push me into the right direction to understand pathnames. I hope it's the same with others who also expressed their problems with this concept.
I'll try to keep the ball rolling by reading the rest of the CLtL2 chapter tonight and by trying out more examples and asking more questions here.
> The thing the creators of the standard made of it was that if the > community ever cared enough, it could make layered standards. Then > vendors who wanted to could adhere to such standards, and vendors > who didn't could ignore them.
Just out of curiosity: Did such layered standards ever happen? I suppose the answer is no. At least I've never heard of one since I started reading c.l.l.
> > Assume I'm writing an application with ACL for Windows but I want > > it to be portable to LispWorks and CormanLisp as > > well. Furthermore, I might want to target the Linux market with > > the same application later on. It looks like I have to resort to > > namestrings (which is as unportable as it could be) if I want to > > specify the exact location of a file in the filesystem.
> This is a HUGE leap from what you said above. Why would you say > that??
> I don't agree at all with this conclusion.
Hmm, maybe I was to rash with my conclusion. I should add here that I don't have a specific application in mind. If I had to use file system functions in the past, I just used namestrings because I wrote those apps for learning the language and didn't care about portability. My asking things about pathnames now is also just based upon my desire to learn what they're for. Currently, I'm just toying around with them and ask questions while a month ago I would have just eschwed them completely 'cause I thought I would never get it.
> I'm not going to make up examples here without a framework of a real > program. It is definitely not the case that one can just work from > pathnames to an arbitrary algebra of ideas that works for all > operating systems everywhere. There are too many rough edges. But > most of the common cases do work quite predictably, and I don't > understand why you would think otherwise. I need examples of what > you are saying doesn't work.
No, I wasn't intending to say that something doesn't work. To the contrary, I was looking for examples how pathnames may work because I couldn't imagine them myself.
Now let my try a simple example: Suppose I've written an application that magically creates HTML pages from PDF files that look exactly like the original document on all browsers. The program would ask the user to specify the location of the PDF file and would create an HTML file in the same location with a different suffix (or probably create a subdirectory with a name derived from the name of the PDF file and store the HTML file there). It is also likely that the application will have to create some GIF or JPEG files and store them somewhere. Now I probably would write it such that the user's input is of course a namestring in the native language of his file system. I could then convert this namestring to a pathname and manipulate its type component (which is obviously more general a concept than 'suffix') to be "HTML" instead of "PDF" to generate a pathname for the resulting HTML document. I could also append the name component of the pathname to its directory component to create a directory next to the PDF document to hold the HTML file and the pictures belonging to it.
Now that I think of it this really sounds more portable and elegant than fiddling with the namestrings themselves. Also, if someone invents a wonderful new operating system tomorrow I'll 'just' have to wait for a matching CL implementation and chances are good that my application will work fine although I didn't even know the new file system when I wrote it. Hmm, sounds good... :)
Is that the way pathnames are intended to be used?
(I still can't imagine what I would do with the device and host components but this is obviously due to my limited knowledge of file systems that aren't derived from Unix. See below.)
> > Disclaimer: Apart from some faint memories of systems like NOS/VE (was > > that from DEC? I can't remember), TOS, CP/M, I've only > > dealt with the systems that seem to be in wide-spread use > > today - Unix, Mac, DOS/Windows. I understand that > > historically CL had to cope with many other filesystems > > that I've never used personally and I regard it as an > > heroic effort to even try to invent an abstract concept > > that applies to all of them. I just wonder if it wasn't > > futile.
> I still use my Lisp Machine today to debug certain kinds of code, > and don't personally regard this as futile. No personal slight > intended, but I also tend to think as a general concept that it's > the height of arrogance for mankind, in general, to use words like > "modern" as if these were stable. Increasingly, as I see things > change in the world, I prefer the term "contemporary" because it > acknowledges that today's "modern" will be tomorrow's > "old-fashioned". Just becuase we have Unix, Mac, Windows today > doesn't mean we'll be stuck without versioning forever. I hope > someone will have the good sense to invent it. Certainly it's there > for the ISO file system. CL is not an attempt to be "of the > moment", it is an attempt to be "timeless".
If you understood my paragraph above as promoting "modern" concepts versus proven solutions like CL this must be due to my not being a native speaker. I _do_ value solutions which try to be timeless and I hate to see them losing against marketing hype almost always. To give an example: When doing photography, I always use _very_ old Leica rangefinder cameras, Kodak b/w films from the fifties and good old French baryt paper. I cannot understand why people prefer all those pesky "modern" cameras and materials, especially the digital ones. But this is a personal luxury, and I'm doing this as my hobby, while programming is my means of feeding my family. I'd love to know more about Lisp Machines and other things that I never came across. But my spare time is limited and I guess I'll have to cope with Unix, Mac, Windows for the next couple of years... :(
Thanks again for your time. I'll be back with more questions in the next days.
Tim Bradshaw <t...@cley.com> writes: > Well one thing you missed is that Windows has at least one other > type of pathname, namely UNC (?) paths - the things that looks like > \\host\share\path...\file.type. Any system that runs on Windows > needs to cope with these things as well as normal physical paths, I > think.
You're right, I forgot about it. It shows that I don't use Windows that often I guess.
Erik Naggum <e...@naggum.net> writes: > * "Eduardo Muñoz" <e...@jet.es> > | Given this paragraph and some other comments written by you in this (and > | other) thread maybe you could do something about it. You said some time > | ago that you had a project to write a book (or two) and IMHO you have > | enough power (or credit) within the lisp community to set a de-facto > | standard in some aspects of the CLHS that are not clear enough. You could > | fill holes and gaps, point to design flaws (not trying to correct them so > | we'll have a lisp branch, just warning and giving advice about them) and > | explaining how things should work.
> This is indeed a bit naive. The ANSI Standard is a legal document, > effectively an attachment to the contract you sign with your vendor when > you purchase (a license to) a Common Lisp system that purports to conform > to it. Its legal status is well known and effectively peer-reviewed > through the standardization process. Relying on the personal commentary > of the editor of the standard reduces the legal standing of the standard > so much that it is effectively useless as such, and ANSI would have the > right to protect its brand name (if not investment) by any means it might > find necessary.
This part is definitely on target.
ANSI warned us in the very first X3J13 meeting not to ever interpret the standard. This is why I am much more prone publicly to say that off the wall interpretations are possible than I am to say that off the wall interpretations are out to lunch. If reasonable people read the standard oddly, that's a weakness of the standard, not a fault of those reasonable people. And I define "reasonable people" less by the outcome they achieve (as might seem the intuitive way of doing it) and more by their "stake". That is, anyone who has built an implementation or a large system in CL is, by my definition, entitled to be a reasonable person. They have a stake in the game and no reason to be undermining the community. Their time and monetary investment in the language is sufficient to me to say their position must be taken seriously. Occasionally, people who've done little more than open the spec to a random page and get confused complain of something and I sometimes go out on a limb and suggest they need further reading....
> I would not want to be Kent Pitman if ANSI got pissed at > him for publishing such _official_ commentaries outside of the process > that created the standard, basically because it would open up for > lawsuits against ANSI for failure to follow proper procedures to ensure > that no particular vendor was unduly favored in its creation.
This part is also right, but the underscoring of "official" is so subtle it might not have sunk in. Let me expand: It is possible for me or anyone to create unofficial remarks that are our personal opinions about what we wish. We simply must not say "the standard says...". We can say "I wish the standard had said..." or "I suggest the following style as a way of filling in gaps in the standard..."
I will at some point do some style advice as part of my emerging books. Style guides are no problem legally. Everyone does them.
But really it requires the community as a whole to build consensus on what it wants, and the best start on that is experience by users of deployed vendor interpretations. I don't think any single person can simply declare one user base right and one user base wrong. If, on the other hand, one user base is always dissatisfied and another is not, the dissatisfied group might want to hammer on their vendor to be more like the vendor who's supplying their happier pals.
> | Writing a book these days isn't big bussines but I think that given your > | big experience in lisp and your kwnodledge of the spec, a book by you > | would be an inmense help to the lisp community. It would help users and > | implementors to agree in the dark corners of the spec.
> If it did, it would be a dangerous document.
Well, I think the danger is all a function of presentation, but it's surely true that a legally and socially safe presentation might lose some of the definitiveness that is perhaps being suggested here.
> | Maybe this book wont be such a bad bussines. I guarrantee you that I'll > | buy a copy (and I'm sure that more of 50% of c.l.l will do too :)
> I would buy one, too, just as I bought The SGML Handbook by Charles > Goldfarb when ISO 8879 turned out to be fairly unreadable by itself, but > that was before I had legal training and worked with lots of lawyers.
Heh.
> A standard is _specifically_ relinquished from anyone's personal control > and left to the community of people that adopted it by its representative > and proxies. To re-acquire personal control over it would diminish the > value of the whole standardization process, just as if a politician who > had helped push a particular law instructed the courts to interpret it a > particular way. (Perhaps you have be really _deeply_ into politics and > law to see why this is fantastically bad karma, but trust me: it is.)
Not lost on me.
I am constantly reminding people of this and I get people poking fun at me about false humility when I say "I'm just another opinion" but it is this legal aspect, not any issue of humility (false or otherwise), that causes me to continue to mention it. My credential as Project Editor merely entitles me to say "I was a historically close observer and am more than likely relaying firsthand information, if I am neither misremembering or misstating or just lying, any of which is in principle possible if you don't know enough about me to believe otherwise." As a firsthand observer, I am certainly privvy to some knowledge about things that were said in conjunction to the standard's creation, but I am no moreso than any other participant who was alwys there. And has been observed about witnesses to crimes, memory is not black&white, and people can reasonably disagree on things they saw with their own eyes.
Further, when we voted to approve, "I observed that" and "I recall that" we said over and over explicitly to everyone: Once we vote yes, it will erase all the cleanup writeups. Truth will from then on be judged not by what we intended, but what we wrote (and more to the point: what I typed, whether or not I transcribed or edited accurately) and that people had better be darn sure that they were willing to stand not just by all the little votes leading up but by the actual words we wrote... This goes back to the discussion of Sir Thomas More I made in another thread yesterday, on the philosophy of the meaning of words and language. But I won't repeat myself on that so soon; dredge it up in DejaNews (a.k.a groups.google.com) if you care.
Tim Bradshaw <t...@cley.com> writes: > * Eduardo Muñoz wrote: > > Writing a book these days isn't big bussines but [...] > While I'd love to see a book by KMP, I don't see what has got > basically easier about writing a book since the invention of good text > editors. *Publishing* may be easier (especially if you don't want to > get paid much/at all) but you still have to write hundreds of pages of > high-quality text, which is the main barrier...
I was talking about money, not about easyness :)
If KMP writes such book he deserves a medium-big pile of cash, but maybe he wont get it.
> Kent M Pitman <pit...@world.std.com> writes: > > The thing the creators of the standard made of it was that if the > > community ever cared enough, it could make layered standards. Then > > vendors who wanted to could adhere to such standards, and vendors > > who didn't could ignore them.
> Just out of curiosity: Did such layered standards ever happen? I > suppose the answer is no. At least I've never heard of one since I > started reading c.l.l.
No. They tried to happen, but no one wanted them.
When I say "no one wanted them", I don't mean it in the casual sense that someone here, for no cost, can stand up and say "I did". I mean in the more formal sense of "It would cost a lot, and when push came to shove, an insufficient amount of money and energy was not rendered to create the necessary processes". Perhaps that will change. But I honestly doubt the need. That's not to say it's impossible. I'm just saying that the present situation is just not so intolerable that it's worth the dollar trade of spending money on "really" fixing the problems instead of spending money on merely working around the problems. They're not that hard to work around, and people have more important things to do. Perhaps a patron will come along and fix things some day, but it is no small expense to get real community consensus and it is quite a small expense to learn how to use these facilities judiciously and how to use #+/#- in the few places they fall down.
> Now let my try a simple example: Suppose I've written an application > that magically creates HTML pages from PDF files that look exactly > like the original document on all browsers. The program would ask the > user to specify the location of the PDF file
As a string. End-users don't care about Lisp datatypes.
> and would create an HTML file > in the same location with a different suffix (or probably create > a subdirectory with a name derived from the name of the PDF file and > store the HTML file there).
Right. This is where you use structured tools for merging so you don't screw up the merging by ad hoc string operations of your own
> It is also likely that the application > will have to create some GIF or JPEG files and store them > somewhere. Now I probably would write it such that the user's input is > of course a namestring in the native language of his file system.
Right.
> I could then convert this namestring to a pathname
This will be done implicitly by pathname operations. For efficiency, it's sometimes useful to do it early to keep it from being done over and over. But it's not much an issue. You can just carry it around as a string and still do all the pathname operations on it.
> and manipulate its > type component (which is obviously more general a concept than > 'suffix') to be "HTML" instead of "PDF" to generate a pathname for the > resulting HTML document.
Again done by MAKE-PATHNAME or MERGE-PATHNAMES.
> I could also append the name component of the > pathname to its directory component to create a directory next to the > PDF document to hold the HTML file and the pictures belonging to it.
Don't do this as a string. And pathnames have no notion of "appending". You mean you could do MAKE-PATHNAME (with :defaults) or MERGE-PATHAMES.
> Now that I think of it this really sounds more portable and elegant > than fiddling with the namestrings themselves.
Yes.
> Also, if someone > invents a wonderful new operating system tomorrow I'll 'just' have to > wait for a matching CL implementation and chances are good that my > application will work fine although I didn't even know the new file > system when I wrote it. Hmm, sounds good... :)
Yes.
> Is that the way pathnames are intended to be used?
Yes.
> (I still can't imagine what I would do with the device and host > components but this is obviously due to my limited knowledge of file > systems that aren't derived from Unix. See below.)
On Tops-20, a "device" was a kind of component. They were like C: and D: on MS-DOS and I prefer to think of those as "devices". So if you do, in Tops-20, "PS:<FOO.BAR.BAZ>FILE.LISP.13" you mean "device PS" (kinda like "C:" since PS meant "primary structure"), directory (:ABSOLUTE "FOO" "BAR" "BAZ"), name "FILE", type "LISP", version 13. Note that "SS:<FOO.BAR.BAZ>" or "SECOND:<FOO.BAR.BAZ>" were often unrelated directories. And also that it could be that device: was not just a primitive file structure but a search list (kind of like $PATH) so that it would find the first of several structures. This is all trivia about Tops-20 I'm telling you. It had nothing to do with CL. But CL's pathname system accomodates this. OZ:PS:<KMP>LISP.INI might have been my init file on the primary file system of the host OZ, as referred to by the Lisp Machine with its "host colon" convention that the first colon was the host and the remaining colons were host specific.
The whole point of the component-wise pathname setup is to let you ignore components not relevant to your file system and to assume they can either be passed straight through or allowed to default. If we had not done it this way, you would have to have code in your personal code to accomodate devices.
For most merging, I mostly just pass devices through "just in case", though typically them when the host is changing.... What is on C: on one file system might be on D: on another. It might matter that you get the device right, but it won't be done "better" by assuming it's the same on all systems... It really has to be supplied where it matters.
Certainly when making a file FOO.LISP from another, you should do:
A good rule of thumb, I claim, is to always use :case :common. I can't stand that it is not the default, but since it is, you must always make it explicit. And don't get lazy about using it on the accessors, or you will compose stupid-looking filenames. The algebra decomposing and recomposing filenames only comes out right if you consistently use :case :common everywhere.
> Well, there are two issues here. Yes, the case-insensitivity keeps you > from making two files that differ only in case. That's an intentional > design feature. But there's a stupid irritating trick in Unix that one > puts something in uppercase to force it to list in a directory at the head > because Unix thinks that the letter ordering is A...Za...z rather than > AaBbCc... This is, unfortunately, an issue of exploiting case. A conseuence > is that one cannot make a system delivered in logical pathnames that puts > a README.txt file at the head of a directory. You will get a readme.txt > file lost in the middle of the other files. To do the "non-standard case" > trick, you must use real pathnames.
What's the whole point about case-sensitivity in file systems anyway? Isn't it plain stupid to allow readme.txt and Readme.txt to coexist? Why do I have to remember/find out/etc the case of a filename to use it? This seems error prone to me. The same applies to case-sensitivity in other areas (just think of certain programming languages... btw: Can you still disable it with Borland C++ compilers?)
Julian Stecklina <der_jul...@web.de> writes: > ... > What's the whole point about case-sensitivity in file systems anyway? > Isn't it plain stupid to allow readme.txt and Readme.txt to coexist? > Why do I have to remember/find out/etc the case of a filename to use > it? This seems error prone to me. The same applies to case-sensitivity > in other areas (just think of certain programming languages... btw: > Can you still disable it with Borland C++ compilers?)
We have sometimes discussed whether the mere name Lisp holds Lisp back. People think they know it from what it was years ago.
I once half-jokingly suggested we call Lisp "c". (Note, not "C". It would be kinda funny if, in order to go after us legally for some kind of trademark infringement and/or fraud, the "C" community had to admit that case sensitivity wasn't really a good way of keeping name collisions from happening....)
The only place I've seen case-sensitivity usefully used is in situations like ñ vs Ñ in XML, where you want either n + ~ or N + ~ depending on what case you've used. That is, only when actually trying to talk about the alphabet itself, which presumably really does want case sensitivity at some level or wouldn't have upper and lower case at all.
* Kent M Pitman | We have sometimes discussed whether the mere name Lisp holds Lisp back. | People think they know it from what it was years ago.
When I decided to design a real markup language in the spirit of Common Lisp, I called it NML (for New/Naggum/whatever Markup Language), prnounced "enamel", and joked that the Common Lisp with <> instead of () would be XCL, X for the hackneyed "extensible". I wanted the Common Lisp reader to be told how to parse elements according to the first symbol in a list. Like, <strong x> should read as a NML element of type strong with the string "x" as the contents. Now, you would have to declare any symbols that would be read this way. The default would be parse the contents as XCL, but then it dawned on me that this could be read as XCl, and considering that simple chlorides are also called "salts", figured that it would be "salt contents".
There are lots of interesting things to say about "salt" as a name for a language. The Next ANSI Common Lisp would be the Common Salt, NaCl. "Salt" is the etymological base for "salary", emphasizing the commercial value of the langauge, and its ancient value is found in expressions like "worth his salt", emphasizing a high standard of value, etc.
| I once half-jokingly suggested we call Lisp "c". (Note, not "C". It | would be kinda funny if, in order to go after us legally for some kind of | trademark infringement and/or fraud, the "C" community had to admit that | case sensitivity wasn't really a good way of keeping name collisions from | happening....)
Devious... :)
| The only place I've seen case-sensitivity usefully used is in situations | like ñ vs Ñ in XML, where you want either n + ~ or N + ~ | depending on what case you've used. That is, only when actually trying | to talk about the alphabet itself, which presumably really does want case | sensitivity at some level or wouldn't have upper and lower case at all.
Chemical formulae tend to need case to distinguish between the elements. A symbol that held the name of symbols could of course be printed with the capitalize notation, and individually be unique, anyway...
/// -- In a fight against something, the fight has value, victory has none. In a fight for something, the fight is a loss, victory merely relief.
>> Also, if someone >> invents a wonderful new operating system tomorrow I'll 'just' have to >> wait for a matching CL implementation and chances are good that my >> application will work fine although I didn't even know the new file >> system when I wrote it. Hmm, sounds good... :)
> Yes.
>> Is that the way pathnames are intended to be used?
> Yes.
>> (I still can't imagine what I would do with the device and host >> components but this is obviously due to my limited knowledge of file >> systems that aren't derived from Unix. See below.)
> On Tops-20, a "device" was a kind of component. They were like C: and > D: on MS-DOS and I prefer to think of those as "devices". So if you > do, in Tops-20, "PS:<FOO.BAR.BAZ>FILE.LISP.13" you mean "device PS" > (kinda like "C:" since PS meant "primary structure"), directory > (:ABSOLUTE "FOO" "BAR" "BAZ"), name "FILE", type "LISP", version 13. > ........ > The whole point of the component-wise pathname setup is to let you > ignore components not relevant to your file system and to assume they > can either be passed straight through or allowed to default. If we > had not done it this way, you would have to have code in your personal > code to accomodate devices.
hmm.... would it be possible to use pathnames for database access? the device would be the database engine, top level "directories" databases, second level "directories" tables and views, and third level entries would be records accessible by some primary key.
would this be possible? would this be efficient? how do you write your "own" glue code between the pathname frontend and low level backend?
Tim Bradshaw <t...@cley.com> writes: > * Edmund Weitz wrote:
> > Disclaimer: Apart from some faint memories of systems like NOS/VE (was > > that from DEC? I can't remember), TOS, CP/M, I've only > > dealt with the systems that seem to be in wide-spread use > > today - Unix, Mac, DOS/Windows. I understand that > > historically CL had to cope with many other filesystems > > that I've never used personally and I regard it as an > > heroic effort to even try to invent an abstract concept > > that applies to all of them. I just wonder if it wasn't > > futile.
> Well one thing you missed is that Windows has at least one other type > of pathname, namely UNC (?) paths - the things that looks like > \\host\share\path...\file.type. Any system that runs on Windows needs > to cope with these things as well as normal physical paths, I think.
Actually, last time I looked, there were many applications that didn't anticipate such pathnames, and hence didn't work, or didn't work correctly with those. In those cases you need to make use of the OS's capability to map such pathnames to "drive letters", which can then be used by the application at hand.
Regs, Pierre.
-- Pierre R. Mai <p...@acm.org> http://www.pmsf.de/pmai/ The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents. -- Nathaniel Borenstein
Julian Stecklina wrote: > I searched ANSI Common Lisp and On Lisp by Paul Graham, but both seem > to ignore the topic of logical pathnames or pathnames in general. The > Hyperspec is a little vague about that topic and I could not find some > kind of tutorials. CLiki and the Cookbook do not provide any > information either.
> Can anybody help?
For what it's worth, I'm expecting a beginner's level article about logical pathnames for the first issue of Yadda Lambda magazine (which I announced in another thread here last night.) That won't be until April, though.
> Actually, last time I looked, there were many applications that didn't > anticipate such pathnames, and hence didn't work, or didn't work > correctly with those. In those cases you need to make use of the OS's > capability to map such pathnames to "drive letters", which can then be > used by the application at hand.
Fortunately the lisp system I use isn't one (:-).
Incidentally, here's a story about pathnames. Our system runs on Windows and *nix (currently Linux). It does a fair amount of stuff to do with fetching things from remote servers which it currently does with rsync (it could use other mechanisms but rsync is the only implemented one). On windows it uses the cygwin rsync (it needs other bits of cygwin, like gcc, anyway).
The largest, most unpleasent and least portable bit of platform-dependence is because of rsync. If you are mirroring from a local filesystem on Windows you typically want to say
rsync c:/... d:/....
But rsync *knows* deep in its little black heart that this means `the host named c'. So what you have to do is realise that cygwin always maps c: to /cygdrive/c (I think this is right) and rewrite pathnames appropriately.
In article <3223417284936...@naggum.net>, Erik Naggum <e...@naggum.net> wrote:
> The default would be parse the > contents as XCL, but then it dawned on me that this could be read as XCl, > and considering that simple chlorides are also called "salts", figured > that it would be "salt contents".
> There are lots of interesting things to say about "salt" as a name for a > language. The Next ANSI Common Lisp would be the Common Salt, NaCl. > "Salt" is the etymological base for "salary", emphasizing the commercial > value of the langauge, and its ancient value is found in expressions like > "worth his salt", emphasizing a high standard of value, etc.
... and allowing Scheme to position itself as a healthy, "low-sodium" Lisp.
Dorai Sitaram wrote: > In article <3223417284936...@naggum.net>, Erik Naggum <e...@naggum.net> wrote: > > The default would be parse the > > contents as XCL, but then it dawned on me that this could be read as XCl, > > and considering that simple chlorides are also called "salts", figured > > that it would be "salt contents".
> > There are lots of interesting things to say about "salt" as a name for a > > language. The Next ANSI Common Lisp would be the Common Salt, NaCl. > > "Salt" is the etymological base for "salary", emphasizing the commercial > > value of the langauge, and its ancient value is found in expressions like > > "worth his salt", emphasizing a high standard of value, etc.
> ... and allowing Scheme to position itself as a > healthy, "low-sodium" Lisp.
No, clearly the low-sodium one would be KCL. Er, I mean KCl.
-- Gareth McCaughan Gareth.McCaug...@pobox.com .sig under construc
Actually, I don't think nil will grab the dir from foo either -- only omitting :directory will do that. -- Martin Simmons, Xanalys Software Tools zne...@xanalys.com rot13 to reply
Well, as discussed ad nauseum, I don't make the rules. But personally, I don't think it has a printed representation. Whether that means an error should be signaled or a system-specific heuristic like SYS:ROOT-DIRECTORY;FOO should be printed is a little less clear. I do think there is a problem.
> > Ick. I wouldn't want you to. You risk having someone think the pathname > > is filled. Consider that
> Well, as discussed ad nauseum, I don't make the rules. But personally, I > don't think it has a printed representation. Whether that means an error > should be signaled or a system-specific heuristic like > SYS:ROOT-DIRECTORY;FOO > should be printed is a little less clear. I do think there is a > problem.
Well, what is your *opinion* about what the following should do on your regular UNIX system?
(let ((p (parse-namestring "/zut"))) ; No trailing slash. (format t "directory: ~S~%name: ~S~%type: ~S~%" (pathname-directory p) (pathname-name p) (pathname-type p)))
(Note the convenient omission of host, device and version from the example :) ).
Cheers
-- Marco Antoniotti ======================================================== NYU Courant Bioinformatics Group tel. +1 - 212 - 998 3488 719 Broadway 12th Floor fax +1 - 212 - 995 4122 New York, NY 10003, USA http://bioinformatics.cat.nyu.edu "Hello New York! We'll do what we can!" Bill Murray in `Ghostbusters'.
> > > > IMO, no one should ever assume that (:ABSOLUTE) exists on a > > > > logical pathname. "BAZ.LISP" has an unsupplied directory and > > > > needs one.
> > > Do you think this was a deliberate restriction of logical pathnames > > > namestrings or just an oversight? Should pathnames such as
> > Well, as discussed ad nauseum, I don't make the rules. But personally, I > > don't think it has a printed representation. Whether that means an error > > should be signaled or a system-specific heuristic like > > SYS:ROOT-DIRECTORY;FOO > > should be printed is a little less clear. I do think there is a > > problem.
> Well, what is your *opinion* about what the following should do on your > regular UNIX system?
> (Note the convenient omission of host, device and version from the > example :) ).
PS. Note also the convient defaulting form of the call to PARSE-NAMESTRING.
Cheers
-- Marco Antoniotti ======================================================== NYU Courant Bioinformatics Group tel. +1 - 212 - 998 3488 719 Broadway 12th Floor fax +1 - 212 - 995 4122 New York, NY 10003, USA http://bioinformatics.cat.nyu.edu "Hello New York! We'll do what we can!" Bill Murray in `Ghostbusters'.
Nils Goesche <car...@cartan.de> writes: > [...] Books that explain to beginners how to define the tangent > space of a manifold always choose some method that takes lots and > lots of pages and intricate computations, although there is a method > that is not only more general but also so easy and short that you > can write it down and explain it on a freakin' beer mat (I did). > [...] Later on, I tried to explain it to beginners, too, more and > more slowly. But noone ever got it.
Maybe the beer had something to do with it.
I have this image of Nils scribbling on a beer mat already densely covered with stars of vectors radiating into all directions from a point: "You see, if we take functions that have a zero here... and the derivative has a zero also... we can form a dual space out of them... and the functions... with a zero... at this point... here..." The beginner pushes his face into the diagram, studying it minutely, and says: "Wow, if you squint your eyes, you can see the vectors radiating in _three_ dimensions!" -- Pekka P. Pirinen "If you don't look after knowledge, it goes away." - Terry Pratchett, The Carpet People
* Nils Goesche wrote: > It is a sad fact that one seems to lose much of the ability to tell > what a beginner finds hard to understand and what not when one is > too deep into a subject. Books that explain to beginners how to > define the tangent space of a manifold always choose some method that > takes lots and lots of pages and intricate computations, although > there is a method that is not only more general but also so easy and > short that you can write it down and explain it on a freakin' beer > mat (I did).
Can it be done with text? if it can I'd like to hear it!
In article <upu2qj1wd....@globalgraphics.com>, Pekka P. Pirinen wrote: > Nils Goesche <car...@cartan.de> writes: >> [...] Books that explain to beginners how to define the tangent >> space of a manifold always choose some method that takes lots and >> lots of pages and intricate computations, although there is a method >> that is not only more general but also so easy and short that you >> can write it down and explain it on a freakin' beer mat (I did). >> [...] Later on, I tried to explain it to beginners, too, more and >> more slowly. But noone ever got it.
> Maybe the beer had something to do with it.
> I have this image of Nils scribbling on a beer mat already densely > covered with stars of vectors radiating into all directions from a > point: "You see, if we take functions that have a zero here... and the > derivative has a zero also... we can form a dual space out of > them... and the functions... with a zero... at this point... here..." > The beginner pushes his face into the diagram, studying it minutely, > and says: "Wow, if you squint your eyes, you can see the vectors > radiating in _three_ dimensions!"
Hehe :-) I always had the impression that beer and mathematics don't disturb each other very much. When I later read again what I wrote days ago in some bar at five in the morning it always still makes sense. The group around Stefan Banach, who invented large parts of functional analysis in the thirties, always met in the same bar. They developed most of the theory in there. They used to scribble notes and formulae on the table cloth, which the waiters didn't like, so the waiters began to always put a large sheet of paper onto their favorite table. Those were collected, and can now be seen in some museum in poland. Stefan Banach was known to outdrink everyone else.
The professor who taught me the above mentioned method to define the tangent space of a manifold, a widely known differential geometer, is a big friend of good wine. He uses to invite his favorite scholars to parties in his apartment where he serves samples of his exquisite wine cellar. Not many of them are able to walk home in a linear fashion when those are over.
Regards, -- Nils Goesche "Don't ask for whom the <CTRL-G> tolls."
| * Nils Goesche wrote: | | > It is a sad fact that one seems to lose much of the ability to tell | > what a beginner finds hard to understand and what not when one is | > too deep into a subject. Books that explain to beginners how to | > define the tangent space of a manifold always choose some method that | > takes lots and lots of pages and intricate computations, although | > there is a method that is not only more general but also so easy and | > short that you can write it down and explain it on a freakin' beer | > mat (I did). | | Can it be done with text? if it can I'd like to hear it!
Getting a bit off-topic here, are we? I don't know what definition Nils has in mind, but there are lots of equivalent definitions out there. My favorite is this:
The tangent space of manifold M at a point P is the set of derivations of the smooth functions at P. Here, a derivation at P (and hence a tangent vector) is a linear map from the smooth functions on M to the reals so that, for any two smooth functions f and g,
X(fg) = X(f)·g(P) + f(P)·X(g).
(I hope most of you read this using the latin 1 charset, where · is a dot (for multiplication).) Note that this looks like a rule for some sort of differentiation, e.g., a partial derivative, at P.
One canonical example is given by a smooth curve gamma in M with gamma(0)=P: Define Xf as the derivative of f(gamma(t)) wrt t at t=0.
It's a fairly short calculation (using a kind of first order Taylor's formula) to show that every tangent vector can be constructed from a path in this way. And then it's an even shorter step to express the general tangent vector as a linear combination of partial derivatives arising from some smooth map on the manifold.
Now I think this is very short and sweet, but the abstraction level may be way too high for beginners, which is why textbooks often choose a more complicated definition, typically starting with expressing a tangent vector in coordinates and then considering what happens when you change to a different coordinate system.
Now I am curious as to whether Nils had this or something else in mind. I have never tried writing this one on a beer mat.