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, while 等语句中。如:</p><p>(if a<br/><font color="#3300ff"> (progn<br/> (setq a 0)<br/> (princ "你好!")<br/> )</font><br/><font color="#ff0000"> (princ "大家好!")</font><br/>)<br/>蓝色部分是 a 为非 nil 的情况下所执行的表达式</p><p>(if a<br/><font color="#808080"> (setq a 0)<br/> (princ "你好!")<br/> (princ "大家好!")</font><br/>)<br/>语法错误,因为 if 至多只能有2个参数</p><p>(if a<br/><font color="#3300ff"> (setq a 0)<br/><font color="#ff0000"> (princ "你好!")</font><br/></font>)<br/>----------------------------------------------------------</p><p>cond一般则不需要progn</p><p>(cond</p><p> (<font color="#00ff00">(= a 1)</font><font color="#000000"><br/> </font><font color="#ff0000">...</font><font color="#000000">)</font></p><p> (<font color="#00ff00">(= a 2)</font><font color="#000000"><br/> </font><font color="#f73809">...</font><font color="#000000">)</font></p><p> ...</p><p>)</p><p>直到绿色部分返回 非nil 值则执行随后的红色部分</p><p>(setq a T)</p><p>(cond</p><p> (<font color="#0033ff">(progn a (setq a 0) nil)</font>)</p><p> ((memberP a) (setq a (1+ a))(setq b T) (princ "123")))</p><p> ...</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
可以,不需prognliminnet 发表于 2008-8-6 17:02:00
页:
[1]