2

y = 1/x数字のリストに実装する必要があります。

いえ

inv (List1, ResultingList).

inv ([2 , 1 , 0 , 0.25 ] , R).
R = [ 0.5, 1, inf, 4.0 ].

再帰関数を試してみましたが、うまくいきません。

これが私の「解決策」です:

    inv([], []).
    inv(list, R):- list == [H|T], T \== [], Y is (1/H),
        append(R, Y, R), inv(T);
        list = [H|T], T == [], R = T;
        list = [H|T], H == [0], append(R, "inf", R).

間違いが多いのはわかっていますが、道がわかりません。

4

1 に答える 1

2

変数名は大文字で始まり、(==)/2非常にまれな場合にのみ使用されます。このような述語には、さらにappend/3めったに使用されません。簡単に言うと:

inv([], []).
inv([X|Xs], [Y|Ys]) :-
   Y is 1/X,
   inv(Xs, Ys).

または:

reciprocal(X, Y) :-
   Y is 1/X.

inv(Xs, Ys) :-
   maplist(reciprocal, Xs, Ys)

または使用してlibrary(lambda)

inv(Xs, Ys) :-
   maplist(\X^Y^(Y is 1/X), Xs, Ys).

maplist/3最も一般的には、補助定義なしで直接呼び出されることに注意してください。

ただし、継続値の使用に関する標準はありませんinf。本当に必要な場合は、その余分な処理を自分で行う必要があります。

于 2013-11-06T23:58:08.463 に答える