% file: 01-dictionary.p % defines vocabulary % adds entry listing for singular and plural % dictionary(Word, Type, Listing). dictionary(bluebird,noun,[[singular, bluebird], [plural, bluebirds]]). dictionary(woodduck,noun,[[singular, woodduck], [plural, woodducks]]). dictionary(woodpecker,noun,[[singular, woodpecker], [plural, woodpeckers]]). dictionary(anemone,noun,[[singular, anemone], [plural, anemones]]). dictionary(lily,noun,[[singular, lily], [plural, lilies]]). % in_dictionary(Word,Entry) :: Word is in dictionary under entry Entry in_dictionary(Word,Word) :- dictionary(Word,_,_). in_dictionary(Word,Entry) :- singular_of(_,Word,Entry). in_dictionary(Word,Entry) :- plural_of(_,Word,Entry). % singular_of(Word,Singular,Entry) :: Word has singular Singular under % entry Entry singular_of(Word,Singular,Word) :- dictionary(Word,_,Listing), extract(singular,Listing,Singular), !. singular_of(Word,Singular,Entry) :- dictionary(Entry,_,Listing), in_listing(Word,Listing), extract(singular,Listing,Singular), !. % plural_of(Word,Plural,Entry) :: Word has plural Plural under % entry Entry plural_of(Word,Plural,Word) :- dictionary(Word,_,Listing), extract(plural,Listing,Plural), !. plural_of(Word,Plural,Entry) :- dictionary(Entry,_,Listing), in_listing(Word,Listing), extract(plural,Listing,Plural), !. in_listing(Word,[[_Usage, Word] | _Rest]). in_listing(Word,[_ | Rest]) :- in_listing(Word,Rest). extract(Attribute,[[Attribute, Value] | _Rest], Value). extract(Attribute,[_ | Rest], Value) :- extract(Attribute,Rest,Value).