- Reference manual
:- use_module(library(filesex)).(can be autoloaded)
?- relative_file_name('/home/janw/nice', '/home/janw/deep/dir/file', Path). Path = '../../nice'. ?- relative_file_name(Path, '/home/janw/deep/dir/file', '../../nice'). Path = '/home/janw/nice'.
Add a terminating
/ to get a path relative to a directory,
?- relative_file_name('/home/janw/deep/dir/file', './', Path). Path = 'deep/dir/file'.
|All||paths must be in canonical POSIX notation, i.e., using / to separate segments in the path. See prolog_to_os_filename/2.|
- It would probably have been cleaner to use a directory as second argument. We can not do such dynamically as this predicate is defined as a syntactical operation, which implies it may be used for non-existing paths and URLs.