0

リストの「メンバー」関数を作成する方法を理解しようとしています。これまでにこれを作成しましたが、正解に近づくことはできません。


spec([system001,hard_drive(50)]).
spec([system002,hard_drive(150)]).

list1(Component):-
    spec([Component,X|Y]).

which_system(Component, Component).

which_system(Component):-
    list1(Component),
    which_system(X, Component).

入力するwhich_system(system001). と機能しますが、入力するwhich_system(hard_drive(50)). とまったく機能しません... hard_drive(50)を見つける方法がわかりません。

誰かが助けてくれることを願っています...

ありがとう。

4

1 に答える 1

2

あなたはそれを必要以上に複雑にしています

which_system(Component, System) :-
  spec([System|Components]), member(Component, Components).

これは、たとえば、システムにさらに多くのコンポーネントがある場合にも機能しますspec([system001, hard_drive(50), hard_drive(100)]).

?- which_system(hard_drive(50), S).

Sをsystem001にインスタンス化します。

于 2012-11-15T20:28:55.973 に答える