求教 如何让(list 1 ‘+ 2 ’* 3)produce 运算步骤 谢谢
scheme吧
全部回复
仅看楼主
level 2
刘同志mht 楼主
例如
(A (list 1 ‘+ 2 ‘* 3))
=》 1 + 2 * 3
=》 1 + 6
=》 7
2014年09月23日 21点09分 1
level 12
你这个问题有点怪,Scheme 的语法不是这样的啊,你没法这么写。
比如说你要计算 1 + 2 * 3,你只能写成这样:
(+ 1 (* 2 3))
我不知道该怎么理解你的问题,是说你要写一个函数 A,用于计算一个给定的表达式吗?比如说
(A "1 + 2 * 3")
=> 7
但是同时打印出计算步骤?
2014年09月24日 08点09分 2
是给一个list 然后 打印出 运算步骤, 用这个list里面给的数和运算符号, 而且不是根据 scheme 的表达方法来的 就是要打印出我上面写的东西 谢谢
2014年09月24日 14点09分
就是说有一个 function consume 一个list 这个list 中只有数字和 运算符号 而且是以数字开头和结尾的,然后这个function要做的是 print出预算步骤 而且是根据上面我写的 格式打印出来 我这么说您能懂了吗 谢谢
2014年09月24日 14点09分
回复 刘同志mht : 只有数字和运算符号的话,就相当于是一个 TOKEN 序列,假设文法就是四则运算,使用编译原理中 Parser 部分的任意一种方法都可以将给定的序列转换成一棵计算树。得到这棵计算树之后,打印就是中序遍历,一步计算就是将计算树最末端的两个节点合并为一个节点的过程。
2014年09月25日 02点09分
回复 刘同志mht : 其实还挺复杂的,如果手工做的话,因为还要考虑递归消除,算符优先级,算符结合性……如果不考虑手工的话,可以使用 Racket 自带的库 parser-tools/parser
2014年09月25日 03点09分
level 12
如果你要看 (+ 1 (* 2 3)) 的计算过程,可以看这里:http://docs.racket-lang.org/stepper/index.html
2014年09月24日 08点09分 3
1