1

我无法获取列表中的第一个浮点元素。到目前为止我所做的(也许完全没用):

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
4

3 回答 3

3

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

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

否则你在正确的轨道上。

于 2012-10-04T01:54:34.880 回答
1

尝试这个

get_float([], _).

get_float( [ First | Rest ], F ) :-
    (float(First), F = First);
    get_float( Rest, F ).
于 2012-10-04T02:14:15.893 回答
1

逻辑应该是:

  1. 如果第一个项目是浮动,那就是你的家伙。
  2. 如果第一项不是浮点数,则从列表的其余部分获取第一个浮点数。

看起来您正在尝试在第二个谓词中执行 #2。您的第一个谓词看起来正在尝试执行 #1,但并未测试 F 是否是列表的第一个元素。

于 2012-10-04T01:43:29.700 回答