SWI Prolog将列表中的值与常量进行比较,但应获取错误字符

SWI 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

我想写一个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),
    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].