236:-
term_to_atom/2
use_module(library(charsio), []).
239:-
seen_module/1
parameter/1
dynamic([, ]).
241parameter(texts((
+inf))).
242parameter(depth((
+inf))).
243parameter(default_ext(
'.yap')).
257 write(
'digraph G {\nrankdir=BT'),
write,
258 extract_name_file(
InputFile,
Name,
File),
260 read_module_file(
File,
Name),
275 assertz(parameter(texts(
Texts))),
276 assertz(parameter(depth(
Depth))),
277 assertz(parameter(default_ext(
Ext))),
280 assertz(parameter(texts((
+inf)))),
281 assertz(parameter(depth((
+inf)))),
282 assertz(parameter(default_ext(
'.yap'))).
284path_seperator(
'\\')
:-
288split_path_file(
PathFile,
Path,
File)
:-
289 path_seperator(
PathSeperator),
290 atom_concat(
Path,
File,
PathFile),
291 name(
PathSeperator, [
PathSeperatorName]),
292 name(
File,
FileName),
293 \+ memberchk(
PathSeperatorName,
FileName),
295split_file_ext(
FileExt,
File,
Ext)
:-
296 atom_concat(
File,
Ext,
FileExt),
297 atom_concat(
'.',
_,
Ext),
298 name(
'.', [
DotName]),
300 findall(
A, (member(
A,
ExtName),
A = DotName),
L),
304parse_module_directive(
':-'(module(
Name)),
_)
:-
305 seen_module(node(
Name)),
seen_module.
306parse_module_directive(
':-'(module(
Name,
_Exported)),
_)
:-
307 seen_module(node(
Name)),
seen_module.
308parse_module_directive(
':-'(module(
Name,
Exported)),
Shape)
:-
309 parse_module_directive,
\+ seen_module(node(
Name)),
310 assertz(seen_module(node(
Name))),
311 list_to_message(
Exported,
ExportedMessage),
312 atom_concat([
Name,
' [shape=',
Shape,
',label="',
Name,
'\\n',
ExportedMessage,
'"]'],
NodeDefinition),
313 write(
NodeDefinition),
write.
314parse_module_directive(
':-'(module(
Name)),
Shape)
:-
315 \+ seen_module(node(
Name)),
316 assertz(seen_module(node(
Name))),
317 atom_concat([
Name,
' [shape=',
Shape,
',label="',
Name,
'"]'],
NodeDefinition),
318 write(
NodeDefinition),
write.
320extract_name_file(
PathFile,
Name,
FinalFile)
:-
321 split_path_file(
PathFile,
Path,
FileName),
Path \== '',
split_path_file,
322 extract_name_file(
FileName,
Name,
File),
323 atom_concat(
Path,
File,
FinalFile).
324extract_name_file(
File,
Name,
File)
:-
325 split_file_ext(
File,
Name,
_),
split_file_ext.
326extract_name_file(
Name,
Name,
File)
:-
327 parameter(default_ext(
Ext)),
328 atom_concat(
Name,
Ext,
File).
330read_use_module_directive(
':-'(ensure_loaded(library(
Name))),
Name, library(
Name), [])
:- read_use_module_directive.
331read_use_module_directive(
':-'(ensure_loaded(
Path)),
Name,
FinalFile, [])
:-
332 extract_name_file(
Path,
Name,
FinalFile),
extract_name_file.
333read_use_module_directive(
':-'(use_module(library(
Name))),
Name, library(
Name), [])
:- read_use_module_directive.
334read_use_module_directive(
':-'(use_module(
Path)),
Name,
FinalFile, [])
:-
335 extract_name_file(
Path,
Name,
FinalFile),
extract_name_file.
336read_use_module_directive(
':-'(use_module(library(
Name),
Import)),
Name, library(
Name),
Import)
:- read_use_module_directive.
337read_use_module_directive(
':-'(use_module(
Path,
Import)),
Name,
FinalFile,
Import)
:-
338 extract_name_file(
Path,
Name,
FinalFile),
extract_name_file.
339read_use_module_directive(
':-'(use_module(
Name,
Path,
Import)),
Name,
FinalFile,
Import)
:-
341 extract_name_file(
Path,
_,
FinalFile),
extract_name_file.
342read_use_module_directive(
':-'(use_module(
Name,
Path,
Import)),
Name,
FinalFile,
Import)
:-
344 extract_name_file(
Name,
_,
FinalFile),
extract_name_file.
346parse_use_module_directive(
Module,
Directive)
:-
347 read_use_module_directive(
Directive,
Name,
File,
Imported),
348 parse_use_module_directive(
Module,
Name,
File,
Imported).
349parse_use_module_directive(
Module,
Name,
_File,
_Imported)
:-
350 seen_module(edge(
Module,
Name)),
seen_module.
351parse_use_module_directive(
Module,
Name,
File,
Imported)
:-
352 \+ seen_module(edge(
Module,
Name)),
353 assertz(seen_module(edge(
Module,
Name))),
354 read_module_file(
File,
Name),
355 list_to_message(
Imported,
ImportedMessage),
356 atom_concat([
Module,
' -> ',
Name,
' [label="',
ImportedMessage,
'"]'],
NodeConnection),
357 write(
NodeConnection),
write.
359list_to_message(
List,
Message)
:-
361 parameter(texts(
TextCnt)),
362 (
Len > TextCnt + 1 ->
363 append(
FirstCnt,
_,
List),
364 length(
FirstCnt,
TextCnt),
365 append(
FirstCnt, [
'...'],
First)
369 list_to_message(
First,
'',
Message).
371list_to_message([],
Message,
Message).
372list_to_message([
H|T],
'',
FinalMessage)
:-
373 term_to_atom(
H,
HAtom),
term_to_atom,
374 list_to_message(
T,
HAtom,
FinalMessage).
375list_to_message([
H|T],
AccMessage,
FinalMessage)
:-
376 term_to_atom(
H,
HAtom),
377 atom_concat([
AccMessage,
'\\n',
HAtom],
NewMessage),
378 list_to_message(
T,
NewMessage,
FinalMessage).
380read_module_file(library(
Module),
Module)
:-
381 read_module_file,
parse_module_directive(
':-'(module(
Module, [])), component).
382read_module_file(
File,
Module)
:-
383 parameter(depth(
MaxDepth)),
386 split_path_file(
File,
Path,
FileName),
387 catch((working_directory(
CurDir,
Path), open(
FileName, read,
S)),
_, (parse_module_directive(
':-'(module(
Module, [])), box3d), fail)),
391 catch(read(
S,
Next),
_,fail),
395read_module_file(
_,
_).
406process(
_, end_of_file)
:-process.
408 parse_module_directive(
Term, box),
parse_module_directive,
parse_module_directive.
410 parse_use_module_directive(
Module,
Term),
parse_use_module_directive,
parse_use_module_directive.
412 find_explicit_qualification(
Module,
Term),
find_explicit_qualification.
414find_explicit_qualification(
OwnerModule,
':-'(
Module:Goal))
:-
415 find_explicit_qualification,
explicit_qualification(
OwnerModule,
Module,
Goal).
416find_explicit_qualification(
OwnerModule,
':-'(
_Head,
Body))
:-
417 find_explicit_qualification(
OwnerModule,
Body).
418find_explicit_qualification(
OwnerModule, (
Module:Goal,
RestBody))
:-
419 find_explicit_qualification,
explicit_qualification(
OwnerModule,
Module,
Goal),
420 find_explicit_qualification(
OwnerModule,
RestBody).
421find_explicit_qualification(
OwnerModule, (
_Goal,
RestBody))
:-
422 find_explicit_qualification,
find_explicit_qualification(
OwnerModule,
RestBody).
423find_explicit_qualification(
OwnerModule,
Module:Goal)
:-
424 find_explicit_qualification,
explicit_qualification(
OwnerModule,
Module,
Goal).
425find_explicit_qualification(
_OwnerModule,
_Goal).
427explicit_qualification(
InModule,
ToModule,
Goal)
:-
429 functor(
Goal,
FunctorName,
Arity),
430 \+ seen_module(explicit(
InModule,
ToModule,
FunctorName/Arity)),
431 assertz(seen_module(explicit(
InModule,
ToModule,
FunctorName/Arity))).
433explicit_qualification(
InModule,
ToModule,
Goal)
:-
435 \+ seen_module(explicit(
InModule,
ToModule,
'DYNAMIC')),
436 assertz(seen_module(explicit(
InModule,
ToModule,
'DYNAMIC'))).
438explicit_qualification(
InModule,
ToModule,
Goal)
:-
440 functor(
Goal,
FunctorName,
Arity),
441 \+ seen_module(explicit(
InModule,
'DYNAMIC',
FunctorName/Arity)),
442 assertz(seen_module(explicit(
InModule,
'DYNAMIC',
FunctorName/Arity))).
444explicit_qualification(
InModule,
ToModule,
Goal)
:-
446 \+ seen_module(explicit(
InModule,
'DYNAMIC',
'DYNAMIC')),
447 assertz(seen_module(explicit(
InModule,
'DYNAMIC',
'DYNAMIC'))).
450 seen_module(explicit(
InModule,
ToModule,
_Goal)),
451 \+ seen_module(generate_explicit(
InModule,
ToModule)),
452 assertz(seen_module(generate_explicit(
InModule,
ToModule))),
453 all(
Goal, seen_module(explicit(
InModule,
ToModule,
Goal)),
Goals),
454 list_to_message(
Goals,
Explicit),
455 atom_concat([
InModule,
' -> ',
ToModule,
' [label="',
Explicit,
'",style=dashed]'],
NodeConnection),
456 write(
NodeConnection),
write,
write.
478
catch( : Goal,+ Exception,+ Action)
working_directory( ?_CurDir_,? NextDir)
yap_flag( ?Param, ?Value)
nb_setval(+ Name,+ Value)
nb_getval(+ Name, - Value)
make_diagram(+Inputfilename, +Ouputfilename)
make_diagram(+Inputfilename, +Ouputfilename, +Predicate, +Depth, +Extension)
process(+ StreamInp, + Goal)
append(? List1,? List2,? List3)
member(?Element, ?Set) is true when Set is a list, and Element occurs in it
memberchk(+ Element, + Set)