SWI Prolog将列表中的值与常量进行比较,但应获取错误字符
我想写一个SWI Prolog程序,测试结果是否低于4.0SWI Prolog将列表中的值与常量进行比较,但应获取错误字符,prolog,Prolog,我想写一个SWI Prolog程序,测试结果是否低于4.0 因此,我传递了一个列表,如返回值的主题和名称 third([Head|Tail], Z) :- Z = Tail. second([Head|Tail], Z) :- Z = Head. test([Head|Tail], Subject, Z) :- second(Tail, Subject2), Subject2==Subject, third(Tail,Result), Resu
因此,我传递了一个列表,如返回值的主题和名称
third([Head|Tail], Z) :-
Z = Tail.
second([Head|Tail], Z) :-
Z = Head.
test([Head|Tail], Subject, Z) :-
second(Tail, Subject2),
Subject2==Subject,
third(Tail,Result),
Result=<4.0,
Z=[Head|Tail].
发生了一个错误:
ERROR: =</2: Type error: `character' expected, found `2.4'
错误:=用third(Tail,[Result])替换third(Tail,Result)
:
测试([头|尾],受试者,Z):-
第二个(尾部,主体2),
主题2==主题,
第三(尾,[结果]),
结果=<4.0,
Z=[头|尾]。
test/3
可以简化:test([H,Subject,Result],Subject,[H,Subject,Result]):-Result=<4.0.
既然您只是在成功的第三个参数中返回第一个参数,那么您可以省略第三个参数:test([\uu,Subject,Result],Subject):-Result=<4.0。
您不需要second/2
或third/2
[Name,Subject,Result]
是一种低效的表示方式,并且容易出现使用错误。如果可能,使用类似于数据(名称、主题、结果)
的术语。
ERROR: =</2: Type error: `character' expected, found `2.4'
test([Head|Tail], Subject, Z):-
second(Tail, Subject2),
Subject2==Subject,
third(Tail,[Result]),
Result =< 4.0,
Z=[Head|Tail].