首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Haskell while to do while

Haskell while to do while
EN

Stack Overflow用户
提问于 2018-01-06 08:01:37
回答 1查看 161关注 0票数 0

我是Haskell的新手,我已经在这上面工作了几个月了,如果有人愿意帮助我,我会很高兴!我正在尝试让这个程序与do while循环一起工作。

我有一个while语句,它可以运行这个阶乘程序"x = 4;y= 1;while !(x == 0) do (y =y* x;x=x- 1)“,它给出了输出"("x",整数0),("y",整数24)”。程序是这样的:

代码语言:javascript
运行
复制
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":

代码语言:javascript
运行
复制
whilestatement :: Parser Com
whilestatement = 
    do
        symbol "do"
        s <- com
        symbol "while"
        b <- bexpr
        return (While b s)

程序运行并给出相同的输出。但是这是做while语句的正确方法吗?或者你能帮我做这个while语句to do while语句吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-01-06 08:17:56

"do while“语句与"while”语句略有不同,因为它总是在检查条件之前执行一次块。

代码语言:javascript
运行
复制
do BLOCK while (COND)

等同于

代码语言:javascript
运行
复制
BLOCK;
while (COND)  BLOCK

您可以将其集成到您的程序中,方法是返回一个表达式树,其中包含一个在其之前排序的块的副本(使用Seq),或者向Com数据类型添加一个DoWhile用例,然后扩展strans函数来处理它。

此外,在添加while时,您可能需要保留现有的do while解析--也就是说,您可以添加一个新的dowhilestatement解析器,然后将其添加到com解析器中,而不是根据需要更改whilestatement

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48122945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档