1

私が取り組んでいる単純な Prolog プログラムのこの部分は、特定の点から最大でもある程度離れた座標のリストを見つけることになっています。私のコードは機能しますが、指定されたリストの各要素に対してエラーも発生します。

コード:

nearby_places(Places, Position, Signal, NearbyPlaces) :-
    findall(
            X,
            (
                Places,
                member(X, Places),
                is_reachable(Position, X, Signal)
            ),
            NearbyPlaces
        ).

is_reachable(Position, Target, Signal) :-
    manhattan_distance(Position, Target, Distance),
    Distance =< Signal * 3.

manhattan_distance(pos(X1, Y1), pos(X2, Y2), Distance) :-
    Dx is X1 - X2,
    Dy is Y1 - Y2,
    ADx is abs(Dx),
    ADy is abs(Dy),
    Distance is ADx + ADy.

試運転

?- nearby_places([pos(0,0), pos(1,1), pos(2, 50), pos(4, 9)], pos(0,0), 10, N).
ERROR: Type error: `file_path' expected, found `pos(0,0)'
ERROR: Type error: `file_path' expected, found `pos(1,1)'
ERROR: Type error: `file_path' expected, found `pos(2,50)'
ERROR: Type error: `file_path' expected, found `pos(4,9)'
N = [pos(0, 0), pos(1, 1), pos(4, 9)].

私が行ったすべてのテストは正しい結果を生成しますが、これらのエラーも生成します。遠く離れた場所でも役立つものは何も見つかりませんでした。Linux で SWI-Prolog 5.10.4 を使用しています。

お時間をいただきありがとうございます!

4

1 に答える 1

0

Places,2 番目の引数から への行を削除しfindall/3ます。そこでは必要なく、consultおそらく次の呼び出しとして解釈されます。

findall(
        X,
        (
            member(X, Places),
            is_reachable(Position, X, Signal)
        ),
        NearbyPlaces
    ).
于 2013-10-30T15:13:36.593 に答える