Prolog:从列表中获得第一个浮动

时间:2012-10-04 01:16:12

标签: prolog

我无法在列表中获取第一个float元素。到目前为止我做了什么(完全没用,也许):

get_float( _, F ) :- float( F ).

get_float( [ First | Rest ], F ) :-
    get_float( Rest, F ).

给我这个:

some_pred( P ) :-
    get_float( SomeList, FloatNumber ),
    writeln( FloatNumber ). % --> prints a stack position

3 个答案:

答案 0 :(得分:3)

问题是你的第一个案例根本没有检查列表。试试这个:

get_float([F|_], F) :- float(F).

否则你走在正确的轨道上。

答案 1 :(得分:1)

逻辑应该是:

  1. 如果第一项是浮动,那就是你的家伙。
  2. 如果第一项不是浮点数,则从列表的其余部分获取第一个浮点数。
  3. 看起来你正试图在你的第二个谓词中做#2。你的第一个谓词看起来试图做#1,但没有测试看到F是列表的第一个元素。

答案 2 :(得分:1)

试试这个

get_float([], _).

get_float( [ First | Rest ], F ) :-
    (float(First), F = First);
    get_float( Rest, F ).