KrazyMann225 发表于 2022-7-6 09:08:46

“while”循环误解

我希望我的例行程序搜索一个文件,并找到必要的信息来做这件事,它的工作。。。。。但我不知道怎么做。我想知道是否有人能给我解释一下。我不明白的是:
 
我的问题是,什么。我对这方面很陌生,所以我确信这只是我不知道/还没有学会的东西,但不应该有一个表达式来评估吗?或者本质上是说“直到txtline=nil”?

BlackBox 发表于 2022-7-6 09:17:43

很高兴再次见到你。。。让我来为您解释一下while函数。
 
只要TestExpression测试为非NIL,就会执行后续表达式。一旦TestExpression测试为NIL,While循环就完成了,代码继续下一行。
 
语法:

(while <TestExpression>
<Expression>
)

 
使用您的代码示例。。。。

(while (setq txtLine(read-line f))
<Expression>
)

 
编辑:因此,您的代码所做的是“while”变量txtLine有一个值(作为从文件中读取下一行的结果),esle就是这样做的。这将一直持续到文件结束,没有更多的行可读取。
 
供参考:

Lee Mac 发表于 2022-7-6 09:23:50

 
旁白:
 
因为测试表达式的任何非零返回都将允许while循环继续求值。
 
/挑剔

BlackBox 发表于 2022-7-6 09:27:53

 
应得的。
 
谢谢你的澄清,李:眨眼:

Jeff H 发表于 2022-7-6 09:36:27

嘿Lee或RenderMan,
 
出于好奇,Lisp是否具有Do-While循环的等价物
 
While循环进行测试,然后if T执行代码。
 
 
Do While至少执行一次表达式
 
例如:
(测试时执行)
 
因此,只要testexpr的计算结果为T,就执行Expr并继续执行Expr
 
谢谢大家

KrazyMann225 发表于 2022-7-6 09:44:06

这是有道理的。无论我在工作中读了多少次帮助文件,我都无法把它弄清楚。我一直在想,你需要“评估”一些东西(只思考=,/=,)李

Lee Mac 发表于 2022-7-6 09:47:28

 
令人惊讶的是,LISP没有这样的构造,但这并不是说你不能自己滚动:
 
(defun DoWhile ( expr test / flag )
(while (not flag)
   (Expr)
   (if (not (test)) (setq flag t))
)
)
 
 
如。
 
5

irneb 发表于 2022-7-6 09:55:34

不在AutoLisp/VisualLisp中。Lisp程序的其他一些味道(如普通Lisp程序/Clojure等):http://rosettacode.org/wiki/Loops/Do-while#Common_Lisp 
顺便说一句,我仍然觉得Delphi/Pascal对这种类型的循环有“最佳”的命名(无论如何都是最具描述性/可理解的):重复[表达式]直到[测试]
 
无论如何,您可以在AutoLisp中实现类似的功能,但它不会那么顺利。例如。:
然后您需要使用一些引用部分来调用它,例如:
编辑:Dam!对不起,李没有看到这个。无论如何,我的稍有不同-不需要那些外部lambda!

Jeff H 发表于 2022-7-6 10:00:08

谢谢各位,
 
VB使用相同的sorto
边做边做直到
http://msdn.microsoft.com/en-us/library/eked04a7.aspx#Y525

Lee Mac 发表于 2022-7-6 10:07:38

 
别担心
 
我倾向于使用函数的结构(以避免额外变量),但仍然传递lambda函数以避免多重“eval”
 
8
页: [1] 2
查看完整版本: “while”循环误解