リストの最後の2つのアイテムの合計のコードを見つけようとしています。プロローグ内のリストの最後の2つのアイテムの合計
?- last_two([4,5,6,3,6,1,7,3],T).
T = 10
?- last_two([4,5,6,3,6,1,4,5],T).
T = 9
リストの最後の2つのアイテムの合計のコードを見つけようとしています。プロローグ内のリストの最後の2つのアイテムの合計
?- last_two([4,5,6,3,6,1,7,3],T).
T = 10
?- last_two([4,5,6,3,6,1,4,5],T).
T = 9
(?このような問題を発明誰が)
:- use_module(library(clpfd)).
last_two(Xs, S) :-
phrase((..., [X,Y]), Xs),
S #= X+Y. % or S is X+Y.
... --> [] | [_], ... .
:それはこれを返すためにどのように見えるか
last_two([],false).
last_two([H|[]],H).
last_two([_|T], P) :- last_two(T,P).
: 私は今だすべては、リストの最後の項目を返す関数であります
はるかに高速なソリューションがありますが、DCGを理解した後は、上記のことが最も理解しやすいと思います。
false
とデフォルト値を使用することをお勧めしました。私はこれに少し懐疑的です。空リストの理由はなぜfalse
ですか?しかし、効果的に0
は、単一要素のリストですか? Prologでは、単に失敗する可能性があります。 SWI-Prologの中
:- use_module(library(clpfd)).
last_two(Xs, S) :-
last_two(Xs, 0, 0, S).
last_two([], A, B, S) :-
S #= A+B.
last_two([B|Bs], _, A, S) :-
last_two(Bs, A, B, S).
、[はい、あなたが正しいインスタンス
?- last_two([_,U,3],10).
U = 7
ため
を書くことができます。 'false'ではなく' 0'があります。私は[http://swish.swi-prolog.org/](http://swish.swi-prolog.org/)でコードを実行していますが、正しく動作しません。エラーを返します。他の解決策はありますか? –
@ P.Barbra:上記はSICStusとSWIで実行されます。 – false
ありがとうございます。インポート(use_module)せずにこれを解決する方法はありますか?本当に申し訳ありませんが、もし私が私の試験でこれを使用したら、私の先生は幸せにならないでしょう。私はおそらくFを持っていただろう。 –