对于我的课堂作业,我必须编写一个 Prolog 程序,该程序接收一个动词并通过添加“ion”及其变体将其转换为名词。我不想接受单词中的字符列表,而是想接受完整的单词,将其转换为列表并使用它。既然是课堂作业,我们都需要使用老师给的同一个版本的软件。
Amzi Prolog 5.0.31 Windows 2001 年 10 月 20 日 21:25:35 版权所有 (c) 1987-2000 Amzi!公司
在这个版本中,内置谓词 atom_chars 不起作用。
到目前为止我看到的唯一解决方案是:1.取原子(abc)2.使用name/2
谓词获取unicode列表([0w0061,0w0062,0w0063])3.逐个元素取unicode列表,使用名称谓词进行转换每个元素都具有字符并使用元素创建一个新列表。([c,b,a]) 4. 反转列表([a,b,c])
如果您想到更简单的方法来做到这一点,请帮助我。到目前为止,我的作业代码是:
/* Program to output the right form of the -ion suffix*/
go:-write('This is a program to derive verb+ion!!!'),nl,
write('If your verb ends with the letter T or TE, enter 1.'),nl,
write('If your verb ends with SE or DE, enter 2.'),nl,
write('If your verb ends with the MIT, enter 3.'),nl,
write('Enter your choice: '),
read(Class),
change(Verb,Noun,Class).
/* 类型 1 动词 */
change(Verb,Noun,1):-
write(' Enter a verb of type 1.'),
nl,
tab(5),
read(Verb),
concat(Verb,[i,o,n],Noun),
write('The noun form is '),
write(Noun),
write(.).
concat([],List,List).
concat([Head|List1],List2,[Head|List3]):-
concat(List1,List2,List3).
/* 类型 2 动词 */
change(Verb,Noun,2):-
write(' Enter a verb of type 2.'),
nl,
tab(5),
read(Verb),
del_two(Verb,Root),
concat(Root,[s,i,o,n],Noun),
write('The noun form is '),
write(Noun),
write(.).
del_two([_,_], []).
del_two([Head|Tail], [Head|NTail]):-
del_two(Tail, NTail).
/* 类型 3 动词 */
change(Verb,Noun,3):-
write(' Enter a verb of type 3.'),
nl,
tab(5),
read(Verb),
del_two(Verb,Root),
concat(Root,[i,s,s,i,o,n],Noun),
write('The noun form is '),
write(Noun),
write(.).
我第一次在 PROLOG 上工作。所以请原谅任何小错误。