以下にルールを書く必要があります:
リストL1にリストLの最初のN個の要素が同じ順序で含まれている場合に成功する、述語take(L、N、L1)のルールを記述します。次のクエリは、この述語の使用例を示しています。
?- take([5,1,2,7], 3, L1).
L1 = [5,1,2]
?- take([5,1,2,7], 10, L1).
L1 = [5,1,2,7]
私の考えは、L1が空になるまで、いつでも2つのリストの最初の数を削除することです。また、car([X | _]、X)を使用して、最初のリスト==2番目のリストまで毎回最後の番号を削除できると考えています。すでに長さ(L、Len)を書いていますが、次にどうしたらいいかわかりません...
私のコードは次のとおりです。
take(L,X,[]).(I know it miss something, but I don't know how to do...)
take(H|L,N,H|L1):- take(L,X,L1), N is X-1.
=========================更新======================== =========================ありがとう1638891!現在、コードは
take(L,0,[]).
take([H|L],N,[H|L1]):- take(L,X,L1), N is X+1.
しかし、2番目のケースでは機能しません。
?- take([5,1,2,7], 10, L1).
L1 = [5,1,2,7]
追加してみました
take([],X,[])->!.
しかし、「エラー:is / 2:引数が十分にインスタンス化されていません」というポップアップが表示されます。