1:- use_module(library(lists)).    2
    3pddlExport(Parsed) :-
    5	view([parsed1,Parsed]),
    6	generateProblemFromDomain(Parsed),
    7	true
    7.
    8
    9generateProblemFromDomain(Arguments) :-
   10	argt(Arguments,[domainFile(DomainFile),domain(Domain),problemFile(ProblemFile),problem(Problem),solutionFile(SolutionFile),solution(Solution),verbFile(VerbFile),verb(Verb)]),
   11	viewIf([arguments3,[domainFile(DomainFile),domain(Domain),problemFile(ProblemFile),problem(Problem),solutionFile(SolutionFile),solution(Solution),verbFile(VerbFile),verb(Verb)]]),
   12	view([1]),
   13	view([verb,Verb]),
   14	Verb = [verber(A,B,C,D,E)],
   15	view(2),
   16	VerbArguments = [A,B,C,D,E],
   17	view(3),
   18	argt(VerbArguments,[problem(ProblemName)]),
   19	view(4),
   22	
   23	
   24	domain(Domain,ProblemDomainName),
   25	view(5),
   26
   27	getCurrentDateTime(DateTime),
   28	ExtraArgs = [dateTime(DateTime)],
   29
   30	exportFromWSM([domain(Domain),objects(Objects),types(Types),objectList(ObjectList),extraArgs(ExtraArgs)]),
   31	viewIf([objects,Objects]),
   32	exportFromWSM([domain(Domain),init(Init),objects(Objects),types(Types),objectList(ObjectList),extraArgs(ExtraArgs)]),
   33	view([abba]),
   34	viewIf([init,Init]),
   35	exportFromWSM([domain(Domain),goals(Goals),extraArgs(ExtraArgs)]),
   36
   37	Problem = problem(ProblemName,ProblemDomainName,Objects,Init,Goals),
   38	Arguments = [domainFile(DomainFile),domain(Domain),problemFile(ProblemFile),problem(Problem),solutionFile(SolutionFile),solution(Solution),verbFile(VerbFile),verb(Verb)],!
   38.
   39
   40wsmHoldsNow(Expression,_) :-
   41	getCurrentDateTime(DateTime),
   42	atTimeQuery(DateTime,Expression).
   43
   44wsmHolds(Expression,Context) :-
   45	Expression
   45.
   46
   47wsmHolds(DateTime,Expression,Context) :-
   48	
   49	
   50	atTimeQuery(DateTime,Expression)
   50.
   51
   52wsmHoldsWrapper(Expression,Context) :-
   53	(   wsmHolds(Expression,Context) ;
   54	    wsmHoldsNow(Expression,Context)).
   55
   56exportFromWSM(Arguments) :-
   57	argt(Arguments,[domain(Domain),objects(Objects),types(Types),objectList(ObjectList),extraArgs(ExtraArgs)]),
   58	argt(ExtraArgs,[dateTime(DateTime)]),
   59	findall(TmpTypes,types(Domain,TmpTypes),AllTypes),
   60	viewIf([allTypes,AllTypes]),
   63	findall(Type,
   64		(
   65		 member(genls(TypesList,_),AllTypes),
   66		 member(Type,TypesList),
   67		 Type \= '-'
   68		),
   69		TmpTypes1),
   70	findall(Type,
   71		member(genls(_,Type),AllTypes),
   72		TmpTypes2),
   73	append([TmpTypes1,TmpTypes2],TmpTypes),
   74	setof(Type,member(Type,TmpTypes),Types),
   75	view([types,Types]),
   76
   77	viewIf([types,Types]),
   78	findall(Declaration,
   79		(   
   80		    member(Type,Types),
   81		    view([tryingType,Type]),
   82		    setof(ObjectOfType,Type^(wsmHolds(isa(ObjectOfType,Type),z) ; wsmHoldsNow(isa(ObjectOfType,Type),z)),ObjectsOfType),
   83		    append([ObjectsOfType,['-'],[Type]],Declaration)
   84		),
   85		Declarations),
   86	viewIf([declarations,Declarations]),
   87	append(Declarations,Objects),
   88
   89	findall(TmpObjectList,
   90		(   
   91		    member(Type,Types),
   92		    view([tryingType,Type]),
   93		    setof(ObjectOfType,Type^(wsmHolds(isa(ObjectOfType,Type),z) ; wsmHoldsNow(isa(ObjectOfType,Type),z)),TmpObjectList)
   94		),
   95		TmpObjectLists),
   96	view([tmpObjectLists,TmpObjectLists]),
   97	findall(Object,(member(TmpObjectList,TmpObjectLists),member(Object,TmpObjectList)),TmpObjectList),
   98	setof(Object,member(Object,TmpObjectList),ObjectList),
   99
  100	Arguments = [domain(Domain),objects(Objects),types(Types),objectList(ObjectList),extraArgs(ExtraArgs)],!
  100.
  101
  102exportFromWSM(Arguments) :-
  104	
  105	argt(Arguments,[domain(Domain),init(Init),objects(Objects),types(Types),objectList(ObjectList),extraArgs(ExtraArgs)]),
  106	argt(ExtraArgs,[dateTime(DateTime)]),
  108	findall(Predicate,predicates(Domain,Predicate),Predicates),
  109	findall(QueryPredicate,
  110		(   
  111		    member(Predicate,Predicates),
  112		    Predicate =.. [PredicateName|TypeSpec],
  113		    findall([Var,Type],(member(are(Vars,Type),TypeSpec),member(Var,Vars)),VarSpecs),
  114		    length(VarSpecs,ArgsLength),
  115		    length(QueryPredicateArgs,ArgsLength),
  116		    QueryPredicate =.. [PredicateName|QueryPredicateArgs],
  117		    wsmHolds(DateTime,QueryPredicate,z),
  118		    validateAllArgumentsAreObjects(QueryPredicate,ObjectList),
  119		    validateQueryPredicateArgsHaveCorrectTypes(QueryPredicate,QueryPredicateArgs)
  120		),
  121		QueryPredicates),
  122	viewIf([queryPredicates,QueryPredicates]),
  125	
  126	
  127	
  128	
  129	
  130	
  131	
  132	
  133	
  134	
  135	
 validateQueryFunctionArgsHaveCorrectTypes(QueryFunction, QueryFunctionArgs)
  136	
  137	
  138	
  140	findall(Function,functions(Domain,Function),Functions),
  141	findall('='(QueryAssignment,Value),
  142		(   
  143		    member(Assignment,Functions),
  144		    Assignment = f(AssignmentName,TypeSpec),
  145		    findall([Var,Type],(member(are(Vars,Type),TypeSpec),member(Var,Vars)),VarSpecs),
  146		    length(VarSpecs,ArgsLength),
  147		    length(QueryAssignmentArgs,ArgsLength),
  148		    QueryAssignment =.. [AssignmentName|QueryAssignmentArgs],
  149		    view([wsmHolds(DateTime,set(QueryAssignment,Value),z)]),
  150		    wsmHolds(DateTime,set(QueryAssignment,Value),z),
  151		    validateAllArgumentsAreObjects(QueryAssignment,ObjectList),
  152		    validateQueryFunctionArgsHaveCorrectTypes(QueryAssignment,QueryAssignmentArgs)
  153		),
  154		QueryAssignments),
  155	viewIf([queryAssignments,QueryAssignments]),
  158	append([QueryPredicates,QueryFunctions,QueryAssignments],Init),
  159	Arguments = [domain(Domain),init(Init),objects(Objects),types(Types),objectList(ObjectList),extraArgs(ExtraArgs)],!
  159.
  160
  161validateAllArgumentsAreObjects(Term,ObjectList) :-
  163	(   is_list(Term) ->
  164	    foreach(member(SubTerm,Term),validateAllArgumentsAreObjects(SubTerm,ObjectList)) ;
  165	    (	(   Term =.. ['$VAR',VariableName]) ->
  166		true ;
  167		(   (	Term =.. [PredicateName|Args], length(Args,N),N > 0) ->	
  168		    foreach(member(SubArg,Args),validateAllArgumentsAreObjects(SubArg,ObjectList)) ;
  169		    (
  170		     (	 
  171			 member(Term,ObjectList) -> view([true]) ; view([false])
  172		     ),
  173		     member(Term,ObjectList)
  174		    ))))
  174.
  175
  176exportFromWSM(Arguments) :-
  177	argt(Arguments,[domain(Domain),goals(Goals),extraArgs(ExtraArgs)]),
  178	currentPlanningGoals(Goals),
  179
  180	Arguments = [domain(Domain),goals(Goals),extraArgs(ExtraArgs)].
  183	
  184	
  185	
  186	
  187	
  188	
  189	
  190	
  191	
 validateQueryGoalArgsHaveCorrectTypes(QueryGoal, QueryGoalArgs)
  192	
  193	
  194	
  195	
  196	
  198validateQueryPredicateArgsHaveCorrectTypes(A,B) :-
  199	true.
  200
  201validateQueryFunctionArgsHaveCorrectTypes(A,B) :-
  202	true.
  203
  204validateQueryGoalArgsHaveCorrectTypes(A,B) :-
  205	true