小编Cro*_*ess的帖子

Prolog - 使用术语表示和访问复杂的嵌套数据

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)

nested prolog data-structures

6
推荐指数
1
解决办法
387
查看次数

如何检查列表是否是 Prolog 中另一个列表的非空子列表

我正在尝试创建一个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)

prolog sublist

4
推荐指数
1
解决办法
2417
查看次数

标签 统计

prolog ×2

data-structures ×1

nested ×1

sublist ×1