述語にリストを与え、そこからそのリストの要素を含む項を取得する必要があります。
だから私は次のようなものがあります:
turn_into_struct(+List, -Term).
私が考えたことの1つnb_setarg/3
は、リストの各要素に対して再帰的に使用することですが、この方法では、特定のアリティで用語をインスタンス化する必要があり、その方法を見つけることができませんでした.
述語にリストを与え、そこからそのリストの要素を含む項を取得する必要があります。
だから私は次のようなものがあります:
turn_into_struct(+List, -Term).
私が考えたことの1つnb_setarg/3
は、リストの各要素に対して再帰的に使用することですが、この方法では、特定のアリティで用語をインスタンス化する必要があり、その方法を見つけることができませんでした.
最初にリストの長さを見つけ、ダミー値を使用して新しい用語を作成し、次に再帰的に、またはバックトラック (findall
たとえば、を使用) によって各引数を設定できます。必要に応じて追加の詳細を記入します (ただし、あなた自身の努力を台無しにしない限り)。
length(List, Len),
functor(Struct, struct, Len),
% Fill in each argument of Struct here...
=..
ただし、SWI-Prolog の述語を使用した、より単純な 1 行の手法があります。
リストから用語を作成する一般的な方法は、=.. (別名 "Univ") を使用することです。例えば、
turn_into_struct(List, Struct) :-
Struct =.. [structure|List].
元の質問の「構造体」の適切な用語は「用語」です。
(Univは他の回答のコメントで言及されていますが、後世と可視性の向上のための回答として再投稿しています)