Yakov Galka wrote:
relative(x,y) returns a path z (unique up to equivalence), if exists, such that y / z = x (up to equivalence)
If you allow z to be an absolute path, it'd never be unique when x is absolute, because x would be a trivial solution then. This is why I don't particularly like relative( d:/, c:a/b ) == c:a/b -- c:a/b is not a relative path. Absolute, def :- path x is absolute when r / x does not depend on r. On an unrelated note, this c:a/b business sure throws a spanner in the works. It's absolute by the above definition... but it depends on the current directory of drive C... except that there is no such thing as a current directory of drive C in Windows, there's only one current directory per process... except that under DOS current directories were per-drive, so they are emulated today using hidden environment variables*. Madness. How about we just say c:a/b is c:/a/b and be done with it. (*) SET "" will display the hidden variables. The current directory of drive C: is the variable "=C:".