如何将使用atom_to_项的代码从SWI prolog转换为SICStus 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

我正在尝试编写一个规则来比较两个原子,看看哪一个更好,例如(内存_与_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_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中实现了上面的代码。

我很难理解您的代码打算做什么,我认为它无法正常工作

  • 这种比较不可能是正确的
  • atom_to_term/3听起来像是将atom作为第一个参数,您的代码看起来像是传递了一个列表
  • 我不知道startsWith/3的作用是什么,但我假设它与append/3类似,具有不同的参数顺序。特别是我认为它可以成功不止一次
  • 我怀疑(f22,f22)中更好的属性3,更好的属性3,以及(f12,f22)中更好的属性3都是真的。这是故意的吗?如果是这样,那么/2中的“更好的属性3”应该是什么意思

  • (为了得到类似于原始代码的东西,你可以用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).