| ?- gen((sentence, sem:(pred:decl, args:[(pred:call_up, args:[pred:mary,pred:john])]))). CATEGORY: sentence SEM sem ARGS arg_ne_list HD sem ARGS arg_ne_list HD sem ARGS arg_list PRED mary TL arg_ne_list HD sem ARGS arg_list PRED john TL e_list PRED call_up TL e_list PRED decl STRING: mary calls john up ANOTHER? y. STRING: mary calls up john ANOTHER? y. noNotice the extra set of parentheses necessary to make the whole description a single argument for gen/1.
gen can also take three arguments:
gen(Ref,SVs,Iqs)where Ref, SVs and Iqs are the three parts of ALE's internal representation of a feature structure as defined in the last section. This alternative is most useful when the feature structure has been generated before by another process, like parsing, or retrieved from a database.
| ?- rec([john,calls,mary,up],Ref,SVs,Iqs),gen(Ref,SVs,Iqs). CATEGORY: sentence SEM sem ARGS arg_ne_list HD sem ARGS arg_ne_list HD sem ARGS e_list PRED john TL arg_ne_list HD sem ARGS e_list PRED mary TL e_list PRED call_up TL e_list PRED decl STRING: john calls mary up ANOTHER? n. Iqs = [], SVs = sentence(_O-sem(_N-arg_ne_list(_M-sem(_L-arg_ne_list(_K- sem(_J-e_list,_I-john),_H-arg_ne_list(_G-sem(_F-e_list,_E-mary), _D-e_list)),_C-call_up),_B-e_list),_A-decl)) ? yesIn both cases, ALE will print the input feature structure and then will generate and display all possible string solutions through backtracking.
It is also possible to bind the string to a variable, using gen/4 :
[Code]
gen(Ref,SVs,Iqs,Ws).Ws will non-deterministically be bound to the word lists that constitute valid solutions to the generation problem. This can be used as input to rec/1, for example.
| ?- rec([john,calls,mary,up],Ref,SVs,Iqs),gen(Ref,SVs,Iqs,Ws). Iqs = [], SVs = sentence(_O-sem(_N-arg_ne_list(_M-sem(_L-arg_ne_list(_K- sem(_J-e_list,_I-john),_H-arg_ne_list(_G-sem(_F-e_list,_E-mary), _D-e_list)),_C-call_up),_B-e_list),_A-decl)), Ws = [john,calls,mary,up] ? ; Iqs = [], SVs = sentence(_O-sem(_N-arg_ne_list(_M-sem(_L-arg_ne_list(_K- sem(_J-e_list,_I-john),_H-arg_ne_list(_G-sem(_F-e_list,_E-mary), _D-e_list)),_C-call_up),_B-e_list),_A-decl)), Ws = [john,calls,up,mary] ? ; Iqs = [], SVs = s(_L-finite,_K-sem(_J-arg_ne_list(_I-sem(_H-e_list,_G-john), _F-arg_ne_list(_E-sem(_D-e_list,_C-mary),_B-e_list)),_A-call_up)), Ws = [john,calls,mary,up] ? ; Iqs = [], SVs = s(_L-finite,_K-sem(_J-arg_ne_list(_I-sem(_H-e_list,_G-john), _F-arg_ne_list(_E-sem(_D-e_list,_C-mary),_B-e_list)),_A-call_up)), Ws = [john,calls,up,mary] ? ; noThe last two solutions in the example above are generated because the input string, john calls mary up, can be parsed both as a sentence type and as an s type.