我是Haskell的新手,我已经在这上面工作了几个月了,如果有人愿意帮助我,我会很高兴!我正在尝试让这个程序与do while循环一起工作。
我有一个while语句,它可以运行这个阶乘程序"x = 4;y= 1;while !(x == 0) do (y =y* x;x=x- 1)“,它给出了输出"("x",整数0),("y",整数24)”。程序是这样的:
whilestatement :: Parser Com
whilestatement =
do
symbol "while"
b <- bexpr
symbol "do"
s <- com
return (While b s)
任务是创建一个do while语句,它可以运行这个阶乘程序"x =4;y= 1;do (y =y* x;x=x- 1) while !(x == 0)“。我所做的只是在while语句中做了一些更改。我改变了这部分只是互换了符号"do“和符号"while":
whilestatement :: Parser Com
whilestatement =
do
symbol "do"
s <- com
symbol "while"
b <- bexpr
return (While b s)
程序运行并给出相同的输出。但是这是做while语句的正确方法吗?或者你能帮我做这个while语句to do while语句吗?谢谢
发布于 2018-01-06 08:17:56
"do while“语句与"while”语句略有不同,因为它总是在检查条件之前执行一次块。
do BLOCK while (COND)
等同于
BLOCK;
while (COND) BLOCK
您可以将其集成到您的程序中,方法是返回一个表达式树,其中包含一个在其之前排序的块的副本(使用Seq
),或者向Com
数据类型添加一个DoWhile
用例,然后扩展strans
函数来处理它。
此外,在添加while
时,您可能需要保留现有的do while
解析--也就是说,您可以添加一个新的dowhilestatement
解析器,然后将其添加到com
解析器中,而不是根据需要更改whilestatement
。
https://stackoverflow.com/questions/48122945
复制相似问题