my_computer([
case([
motherboard([board(plastic),ports(metal),slots(plastic),capacitors(plastic)]),
power_supply_unit([casing(metal),cables(plastic),connectors(plastic),capacitors(plastic),fan(plastic),transformer(metal)]),
central_processing_unit([board(plastic),fan(plastic),heatsink(metal)]),
random_access_memory([board(plastic)]),
graphics_processing_unit([board(plastic),ports(metal),capacitors(plastic),fan(plastic),heatsink(metal)])
]),
monitor([
lcd_screen(plastic),inverter(plastic),frame(plastic)
]),
keyboard([
key(plastic),frame(plastic),cable(plastic)
]),
mouse([
key(plastic),wheel(plastic),casing(plastic),cable(plastic)
])
]).
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能运行类似monitor(X).或motherboard(X)提供一层或多层(子)材料的问题(就像my_computer(X).那样做)?
下面的代码对于提出这样的问题会更有用吗?关于一层子材料的问题很容易通过这种方式回答.
my_computer([case,monitor,keyboard,mouse]).
case([motherboard,power_supply_unit,central_processing_unit,random_access_memory,graphics_processing_unit]).
motherboard([board,ports,slots,capacitors]).
power_supply_unit([casing,cables,connectors,capacitors,fan,transformer]).
central_processing_unit([board,fan,heatsink]).
random_access_memory([board]).
graphics_processing_unit([board,ports,capacitors,fan,heatsink]).
monitor([lcd_screen,inverter,frame]).
keyboard(keys,frame,cable).
mouse([keys,wheel,casing,cable]).
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个included_list(X,Y)术语来检查 X 是否是 Y 的非空子列表。
我已经用它来检查元素是否存在于 Y 列表中
check_x(X,[X|Tail]).
check_x(X,[Head|Tail]):- check_x(X,Tail).
Run Code Online (Sandbox Code Playgroud)
和附加条款
append([], L, L).
append([X | L1], L2, [X | L3]) :- append(L1, L2, L3).
Run Code Online (Sandbox Code Playgroud)
创建一个列表,以便程序完成
included_list([HeadX|TailX],[HeadX|TailX]).
Run Code Online (Sandbox Code Playgroud)
但是我在处理我试图通过“追加”创建的新空列表时遇到问题(我想创建一个空列表来添加确认存在于两个列表中的元素。)
我找到了这个
sublist1( [], _ ).
sublist1( [X|XS], [X|XSS] ) :- sublist1( XS, XSS ).
sublist1( [X|XS], [_|XSS] ) :- sublist1( [X|XS], XSS ).
Run Code Online (Sandbox Code Playgroud)
但它在 sublist([],[1,2,3,4)