1

リストの最初の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
4

3 に答える 3

3

問題は、最初のケースでリストがまったく調べられないことです。これを試して:

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

そうでなければ、あなたは正しい方向に進んでいます。

于 2012-10-04T01:54:34.880 に答える
1

ロジックは次のようになります。

  1. 最初のアイテムがフロートの場合、それはあなたの男です。
  2. 最初のアイテムがフロートでない場合は、リストの残りの部分から最初のフロートを取得します。

2番目の述語で#2を実行しようとしているようです。最初の述語は#1を実行しようとしているように見えますが、Fがリストの最初の要素であることを確認するためのテストは行っていません。

于 2012-10-04T01:43:29.700 に答える
1

これを試して

get_float([], _).

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