file_name_on_path
This commit is contained in:
parent
0b6b471359
commit
a1e3f0daa2
28
pl/swi.yap
28
pl/swi.yap
@ -6,6 +6,24 @@
|
|||||||
% True if file Alias points to Dir. Multiple solutions are
|
% True if file Alias points to Dir. Multiple solutions are
|
||||||
% generated with the longest directory first.
|
% generated with the longest directory first.
|
||||||
|
|
||||||
|
%% file_name_on_path(+File:atom, -OnPath) is det.
|
||||||
|
%
|
||||||
|
% True if OnPath a description of File based on the file search
|
||||||
|
% path. This performs the inverse of absolute_file_name/3.
|
||||||
|
|
||||||
|
prolog:file_name_on_path(Path, ShortId) :-
|
||||||
|
( prolog:file_alias_path(Alias, Dir),
|
||||||
|
atom_concat(Dir, Local, Path)
|
||||||
|
-> ( Alias == '.'
|
||||||
|
-> ShortId = Local
|
||||||
|
; file_name_extension(Base, pl, Local)
|
||||||
|
-> ShortId =.. [Alias, Base]
|
||||||
|
; ShortId =.. [Alias, Local]
|
||||||
|
)
|
||||||
|
; ShortId = Path
|
||||||
|
).
|
||||||
|
|
||||||
|
|
||||||
:- dynamic
|
:- dynamic
|
||||||
alias_cache/2.
|
alias_cache/2.
|
||||||
|
|
||||||
@ -25,7 +43,7 @@ build_alias_cache :-
|
|||||||
search_path(Alias, Dir, AliasLen, DirLen), Ts),
|
search_path(Alias, Dir, AliasLen, DirLen), Ts),
|
||||||
sort(Ts, List0),
|
sort(Ts, List0),
|
||||||
reverse(List0, List),
|
reverse(List0, List),
|
||||||
forall(member(t(_, _, Alias, Dir), List),
|
forall(lists:member(t(_, _, Alias, Dir), List),
|
||||||
assert(alias_cache(Alias, Dir))).
|
assert(alias_cache(Alias, Dir))).
|
||||||
|
|
||||||
search_path('.', Here, 999, DirLen) :-
|
search_path('.', Here, 999, DirLen) :-
|
||||||
@ -53,3 +71,11 @@ ensure_slash(Dir0, Dir) :-
|
|||||||
atom_concat(Dir0, /, Dir).
|
atom_concat(Dir0, /, Dir).
|
||||||
|
|
||||||
|
|
||||||
|
reverse(List, Reversed) :-
|
||||||
|
reverse(List, [], Reversed).
|
||||||
|
|
||||||
|
reverse([], Reversed, Reversed).
|
||||||
|
reverse([Head|Tail], Sofar, Reversed) :-
|
||||||
|
reverse(Tail, [Head|Sofar], Reversed).
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user