liminnet 发表于 2008-8-6 11:21:00

caoyin 发表于 2008-8-6 12:29:00

本帖最后由 作者 于 2008-8-6 12:32:01 编辑 <br /><br /> <p>progn其实就是将多个表达式打包成一个表达式</p><p>通常用在 if,&nbsp;while 等语句中。如:</p><p>(if a<br/><font color="#3300ff">&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp; (setq a 0)<br/>&nbsp;&nbsp;&nbsp; (princ "你好!")<br/>&nbsp; )</font><br/><font color="#ff0000">&nbsp; (princ "大家好!")</font><br/>)<br/>蓝色部分是 a 为非 nil 的情况下所执行的表达式</p><p>(if a<br/><font color="#808080">&nbsp; (setq a 0)<br/>&nbsp;&nbsp;(princ "你好!")<br/>&nbsp; (princ "大家好!")</font><br/>)<br/>语法错误,因为 if 至多只能有2个参数</p><p>(if a<br/><font color="#3300ff">&nbsp; (setq a 0)<br/><font color="#ff0000">&nbsp;&nbsp;(princ "你好!")</font><br/></font>)<br/>----------------------------------------------------------</p><p>cond一般则不需要progn</p><p>(cond</p><p>&nbsp; (<font color="#00ff00">(= a 1)</font><font color="#000000"><br/>&nbsp;&nbsp;</font><font color="#ff0000">...</font><font color="#000000">)</font></p><p>&nbsp; (<font color="#00ff00">(= a 2)</font><font color="#000000"><br/>&nbsp;&nbsp;</font><font color="#f73809">...</font><font color="#000000">)</font></p><p>&nbsp; ...</p><p>)</p><p>直到绿色部分返回 非nil 值则执行随后的红色部分</p><p>(setq a T)</p><p>(cond</p><p>&nbsp; (<font color="#0033ff">(progn a (setq a 0) nil)</font>)</p><p>&nbsp; ((memberP a) (setq a (1+ a))(setq b T) (princ "123")))</p><p>&nbsp; ...</p><p>)</p><p>因为蓝色部分返回 nil 值,所以下一行的代码也被执行</p><p>以上例子 在cond语句中使用progn可以执行一个以上的表达式</p><p></p><p></p>

liminnet 发表于 2008-8-6 12:48:00

caoyin 发表于 2008-8-6 13:17:00

可以,不需progn

liminnet 发表于 2008-8-6 17:02:00

页: [1]
查看完整版本: prognr 的用法,我这样的理解对吗?