使用CLISP制作给定一系列数字的方程式

时间:2014-10-22 23:16:11

标签: common-lisp

因此我必须使用clisp在给定数字序列的情况下创建2个均等方程

IE用户输入2 2 2 2:

2 + 2 = 2 + 2;是有效的

2 - 2 = 2 - 2;也是有效的

2 = 2 + 2 - 2;有效

2 + 2 + 2 = 2;无效

用户输入6 2 2 2:

6 = 2 + 2 + 2;有效

6 = 2 * 2 + 2;有效

6 + 2 = 2 * 2;无效

*,/,+和 - 的操作用于基本数学,=表示左手侧=右手侧。

我的问题在于我缺乏任何真正的lisp训练以及从哪里开始。我想我必须使用宏,但我不确定如何使用宏或如何使用宏。

我知道最初我必须定义一个函数,例如

(defun findequation(a b c d))

但是从那里我失去了

1 个答案:

答案 0 :(得分:0)

第一步:创建相关符号的所有组合,并限制恰好有一个=

示例输入:(2 2 2 2)(+ - * / =)

示例输出:(2 + 2 + 2 = 2)(2 + 2 - 2 = 2)(2 - 2 - 2 = 2),...

第二步:使用shunting-yard algorithm将交替数字和符号的中缀列表转换为树。

示例输入:(2 + 2 = 2 - 2)

示例输出:(= (+ 2 2) (- 2 2))

然后你可以评估它是否真实。