我正试图用prolog语言编写一些规则来将单数形式改为复数形式,并希望支持编写规则。
我假设你想复数英文单词。一种方法是制定一般规则,并针对特殊情况制定一些具体规则。
% special cases
pluralize(deer, deer).
pluralize(mouse, mice).
pluralize(antenna, antennae).
% general rule
pluralize(Singular, Plural) :- atom_concat(Singular, s, Plural).
有些话似乎没问题:
?- pluralize(coin, X).
X = coins.
?- pluralize(date, X).
X = dates.
但是有些话似乎把它绊倒了:
?- pluralize(fox, X).
X = foxs.
你可能会使规则更加智能化。这是我开始的地方。
list_member(X,[X|_]).
list_member(X,[_|TALL]):-list_member(X,TALL).
isVowels(A):-list_member(A,[a, e, i, o, u]),!.
isConsonants(A):-list_member(A,[b, c, d, f, g, h, j, k, l, m, n, p, q, r, s, t, v, x, w,y,z]),!.
word:- write('Enter the word you want to know weather it followed by a an or the:.'),read(X),nl,
plular(X):-((isVowels(sub_atom(X, _, 1, 0, C)))->(write('Plular form of '),write(X),write(' is '),write(X),write('s'));(write('Plular form of '),write(X),write(' is '),write(X),write('es'))).