【问题标题】:Create Prolog Vocabulary创建 Prolog 词汇表
【发布时间】:2014-02-08 04:45:04
【问题描述】:

我对 prolog 还很陌生,我有一些基本问题...

我不知道“词汇”在英语中是否合适,但我需要创建一个来描述电子电路。

我的问题是,我如何创建这些函数以及如何使用“=”语句,因为 prolog 似乎不接受它?

我正在使用 SWI Prolog。

这就是我必须放入序言的内容:

确定词汇表(谓词、函数、常量):

端口由常量(X1,X2,...)表示——

门(X1)

Type(X1) = Xor – 类型:AND、OR、XOR 或 NOT

电路(C1)

Terminals(x) – 返回 x 的输入和输出

In(1, X1) – 返回 X1 的第一个输入的函数

Out – 返回输出的函数

Arity(c, i, j) - 函数,电路 c 有 i 个输入和 j 个输出

Connected(Out(1, X1), In(1, X2)) - 连接了哪些端口

Signal(t) – 终端 t 的信号值。

这就是我到目前为止所尝试的。我不认为我对“=”的方法是正确的......

gate(x1).
gate(x2).
gate(a1).
gate(a2).
gate(o1).
type(x1, xor).
type(x2, xor).
type(a1, and).
type(a2, and).
type(o1, or).
circuit(c1).

我应该使用名为 Equal(X, Y) 的谓词吗?例如“equal (type(x1), xor)。

我应该如何实现这些?

Gate(X1) , Type(X1) = XOR
Gate(X2) , Type(X2) = XOR
Gate(A1) , Type(A1) = AND
Gate(A2) , Type(A2) = AND
Gate(O1) , Type(O1) = OR 

我不知道如何从这里继续。我试图实现这些功能的所有方法似乎都是错误的(无法咨询)。

【问题讨论】:

    标签: prolog circuit


    【解决方案1】:

    您应该阅读this document 以获得一些灵感:)

    例如,基本的函数(即门)可以这样描述

    and(0, 0, 0).
    and(0, 1, 0).
    and(1, 0, 0).
    and(1, 1, 1).
    
    xor(0, 0, 0).
    ...
    

    然后组合得到更复杂的构建块

    fulladder(A, B, Carryin, Sum, Carryout):-
     xor(A, B, X),
     and(A, B, Y),
     and(X, Carryin, Z),
     xor(Carryin, X, Sum),
     or(Y, Z, Carryout).
    

    计算逻辑函数:

    ?- fulladder(X, Y, Z, 0, 1).
    X = 0, Y = 1, Z = 1 ? ;
    X = 1, Y = 0, Z = 1 ? ;
    X = 1, Y = 1, Z = 0 ? ;
    no
    

    【讨论】:

    • 你的意思是我应该先从一般规则开始,然后编写一个问题的实例,对吗?我认为“词汇”不需要插入 .pro 文件中,我应该从一般规则开始。但是我如何使用“=”来实现行?比如,门(x1),类型(x1)=异或。 (x1 是门,x1 是异或)
    • 在 Prolog 中,使用模式匹配:?- gate(Name), type(Name, Type). 将在类型(注意 - 大写符号是 变量)中提供名称类型。也就是说,您在显示的 Prolog 片段中已经x1 的类型指定为 xor
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2019-03-19
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    相关资源
    最近更新 更多