【发布时间】:2014-04-04 01:38:31
【问题描述】:
假设表达式中可以使用四个运算符,它们是 +、-、* 和 /。所有这些运算符都是二进制的,即,它们以以下格式应用于表达式:[operator,operand1,operand2],其中“运算符”可以是 +、-、* 或 /,每个操作数可以是单个数字,或其他表达式。例如,以下都是合法输入:
[+, 1, 2]
[-, 6, [/, 7, 0.5]]
[*, [/, 78, [-, 67, 3.5]], [+, 4, 9.0]]
但以下不是:
[+, 1] ; missing operand
[6, -, 7] ; every expression must start with an operator
[/, +, 4, 5] ; every expression can only have one operator
[*, 6, 7, 8] ; every expression must have exactly two operands
[%, 6, 7] ; unrecognizable operator
[-, 6, A] ; illegal operator
编写一个名为“main”的谓词来检查表达式的有效性并评估表达式。以下应该是运行程序的方式:
main([+, 1, 2], X)
X = 3
main([-, 6, A], X)
error
[+, 1, 2] 和 [-, 6, A] 是输入的。如果输入合法,你的程序应该输出表达式求值的最终结果,如上例所示。如果输入非法,则结果未定义,即您的程序假定输入是合法的
================================
我试试
expr(Z) --> num(Z).
expr(Z) --> [+], num(X), expr(Y), {Z is X+Y}.
expr(Z) --> [-], num(X), expr(Y), {Z is X-Y}.
expr(Z) --> [*], num(X), expr(Y), {Z is X*Y}.
expr(Z) --> [/], num(X), expr(Y), {Z is X/Y}.
num(D) --> [D], {number(D)}.
main(L, M) :- phrase(expr(M), L).
但是当我写main([-, 6, [+, 7, 0.5]], X). false.
当main([-, 6, A], X).
什么都不做
请帮忙
【问题讨论】:
标签: prolog