我正在尝试编写一个规则来比较两个原子以查看哪个更好(例如memory_with_gb_2比memory_with_gb_1更好)以及我在SWI-prolog中编写和尝试的内容如下:
better_attribute3_in(Attribute3_in,Attribute3):-
atom_codes(Attribute3,List_Attribute3),
startsWith(List_Attribute3,Attribute3_Start,Rest_Attribute3_List),
atom_to_term(Rest_Attribute3_List,Attribute3_Number,_),
number(Attribute3_Number),
atom_codes(Attribute3_in,List_Attribute3_in),
startsWith(List_Attribute3_in,Attribute3_in_Start,Rest_Attribute3_in_List),
atom_to_term(Rest_Attribute3_in_List,Attribute3_in_Number,_),
number(Attribute3_in_Number),
Attribute3_in_Number>=Attribute3.
在SWI-Prolog中完美运行,但是当我在SICStus Prolog中尝试它时,它似乎无法工作,无论如何都要在SICStus中实现上层代码。
答案 0 :(得分:1)
我无法理解您的代码的目的是什么,我认为它不能正常工作。
(为了得到模仿原始代码的东西,你可以用append(B,C,A)替换startsWith(A,B,C)并用名称(A,B)替换atom_to_term(A,B,C) )。
答案 1 :(得分:0)
我明白了,谢谢你的善意建议 我把我的代码更改为:
better_attribute3_in(Attribute3_in,Attribute3):-
atom_codes(Attribute3,List_Attribute3),
startsWith(List_Attribute3,Attribute3_Start,
Rest_Attribute3_List),numeric(Rest_Attribute3_List),
number_codes(Attribute3_Number,Rest_Attribute3_List),
atom_codes(Attribute3_in,List_Attribute3_in),
startsWith(List_Attribute3_in,Attribute3_Start,Rest_Attribute3_in_List),
numeric(Rest_Attribute3_in_List),
number_codes(Attribute3_in_Number,Rest_Attribute3_in_List),
!,Attribute3_Number=<Attribute3_in_Number.
使用ascii代码查看列表内容是代表数字还是否:
numeric(List):-subset(List,[48,49,50,51,52,53,54,55,56,57]).
并使用startsWith查看它们是否以相同的字符串开头(例如,我可以将两个存储器一起比较,但不能比较内存和硬盘):
startsWith(OldString,[],OldString):- true.
startsWith([H|TOldString],[H|T],Rest):-
startsWith(TOldString,T,Rest).