如何将使用atom_to_项的代码从SWI prolog转换为SICStus prolog
我正在尝试编写一个规则来比较两个原子,看看哪一个更好,例如(内存_与_gb_2比内存_与_gb_1更好),我在SWI prolog中编写并尝试的内容如下:如何将使用atom_to_项的代码从SWI prolog转换为SICStus prolog,prolog,swi-prolog,sicstus-prolog,Prolog,Swi Prolog,Sicstus Prolog,我正在尝试编写一个规则来比较两个原子,看看哪一个更好,例如(内存_与_gb_2比内存_与_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
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中实现了上面的代码。我很难理解您的代码打算做什么,我认为它无法正常工作
(为了得到类似于原始代码的东西,你可以用append(B,C,A)替换starts(A,B,C),用name(A,B)替换atom_To_term(A,B,C)。我想明白了,谢谢你的建议 我将代码更改为:
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.
并使用startsWith查看它们是否以相同的字符串开头(例如,我可以比较两个内存,但不能比较内存和硬盘):
这里的号码是什么?这应该是一个简单的整数,还是更多?是的,只是一个简单的整数我假设
List\u Attribute3
和中的List\u Attribute3\u应该是相同的。否则,请参见@Per的回复。顺便说一句,你真的应该阅读导览来了解这个网站是如何工作的。也就是说,如果你的问题得到了合适的答案,那么接受/赞成投票。
numeric(List):-subset(List,[48,49,50,51,52,53,54,55,56,57]).
startsWith(OldString,[],OldString):- true.
startsWith([H|TOldString],[H|T],Rest):-
startsWith(TOldString,T,Rest).