3

述語にリストを与え、そこからそのリストの要素を含む項を取得する必要があります。

だから私は次のようなものがあります:

turn_into_struct(+List, -Term).

私が考えたことの1つnb_setarg/3は、リストの各要素に対して再帰的に使用することですが、この方法では、特定のアリティで用語をインスタンス化する必要があり、その方法を見つけることができませんでした.

4

2 に答える 2

2

最初にリストの長さを見つけ、ダミー値を使用して新しい用語を作成し、次に再帰的に、またはバックトラック (findallたとえば、を使用) によって各引数を設定できます。必要に応じて追加の詳細を記入します (ただし、あなた自身の努力を台無しにしない限り)。

length(List, Len),
functor(Struct, struct, Len),
% Fill in each argument of Struct here...

=..ただし、SWI-Prolog の述語を使用した、より単純な 1 行の手法があります。

于 2012-11-26T23:24:33.883 に答える
1

リストから用語を作成する一般的な方法は、=.. (別名 "Univ") を使用することです。例えば、

turn_into_struct(List, Struct) :-
    Struct =.. [structure|List].

元の質問の「構造体」の適切な用語は「用語」です。

(Univは他の回答のコメントで言及されていますが、後世と可視性の向上のための回答として再投稿しています)

于 2012-11-28T15:35:36.660 に答える