gpt4 book ai didi

coding-style - 是否有任何语言具有 while-else 流结构?

转载 作者:行者123 更新时间:2023-12-04 10:54:41 26 4
gpt4 key购买 nike

考虑一下我经常使用的这种流程结构:

if ( hasPosts() ) {
while ( hasPosts() ) {
displayNextPost();
}
} else {
displayNoPostsContent();
}

是否有任何编程语言具有可选的 else while的条款, 如果从不进入 while 循环,将运行哪个?因此,上面的代码将变成:
while ( hasPosts() ) {
displayNextPost();
} else {
displayNoPostsContent();
}

我觉得有趣的是许多语言都有 do-while构造(在检查条件之前运行一次 while 代码)但我从未见过 while-else解决。根据在 N-1 块中运行的内容运行 N 块代码有先例,例如 try-catch构造。

我不确定是在这里发帖还是在程序员.SE 上发帖。如果这个问题在那里更合适,那么请移动它。谢谢。

最佳答案

这真的很深奥。标准 Common Lisp 不提供它。但是我们在一个名为 ITERATE 的库中找到了它.

Common Lisp 有非常奇特的控制结构。有一个库叫 ITERATE,类似于 Common Lisp 的 LOOP宏,但具有更多功能和更多括号。

例子:

(iterate (while (has-posts-p))
(display-next-post)
(else (display-no-posts-content)))

它完全符合您的要求。 else 子句仅在 while 子句从不为真时运行一次。

例子:
(defparameter *posts* '(1 2 3 4))

(defun has-posts-p ()
*posts*)

(defun display-next-post ()
(print (pop *posts*)))

(defun display-no-posts-content ()
(write-line "no-posts"))

(defun test ()
(iterate (while (has-posts-p))
(display-next-post)
(else (display-no-posts-content))))

有一些帖子:
EXTENDED-CL 41 > *posts*
(1 2 3 4)

EXTENDED-CL 42 > (test)

1
2
3
4
NIL

没有帖子:
EXTENDED-CL 43 > *posts*
NIL

EXTENDED-CL 44 > (test)
no-posts
NIL

关于coding-style - 是否有任何语言具有 while-else 流结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12190462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com