prolog中原子的数学运算

时间:2011-11-29 21:08:33

标签: prolog

如果我有三个原子X,Y和Z,那么

X = 1
Y = 2
Z = +

如何将它们放在一起以便X Z Y = 3?

编辑: 使用ThanosQR的univ解决方案,我修改了我的代码如下:

% Parse list
parse_list([stop|_], _) :- !.   % stop predicate if element is "stop"
parse_list([X, Y|Z]) :- % go through the list line by line
    number(X, Number_1),
    number(Z, Number_2),
    operation(Y, Operation),
    Line =.. [Operation, Number_1, Number_2], 
    Result is Line,
    write(Result).

number(one, 1). 
operation(plus, +). % etc... etc... 

我弄错了......不知道为什么......

2 个答案:

答案 0 :(得分:3)

首先,一般性评论:如果将不纯的谓词如write/1混合到其他纯代码中,最终会得到一个非常难以调试的程序。所以首先要尝试确定你所追求的关系。也许它类似tokens_meaning(Tokens,Meaning),其中Tokens是令牌列表,如上所述,Meaning是要评估的表达式。

为了确定一个问题,只需查看以下片段即可:

...
parse_list([X, Y|Z]) :- % go through the list line by line
    number(X, Number_1),
    number(Z, Number_2),
    ...

number(one, 1).

所以你期望的是你有一个以下形式的术语:

[one, Y|one]

也就是说,Z应该是列表的其余部分。因此,[]或更长的内容(例如[_],而不是one

但在你的情况下,你期望得到像one这样的名字。这当然没有意义。可能你的意思是:

parse_list([X, Y, Z| Whatever]) :-

答案 1 :(得分:1)

尝试univ运算符:

R =.. [Z,X,Y], A is R.