《菜鸟提问》求解释(if (=(cons 1000 "1")(cons 1000 "1")) 1 2)
[*](if (=(cons 1000 "1")(cons 1000 "1")) 1 2)
[*]为什么上面的命令结果是返回2呢?
[*]求解释
本帖最后由 lucas_3333 于 2015-7-31 21:53 编辑
xiang19751218 发表于 2015-7-31 18:21 static/image/common/back.gif
(if [表示式2]) 检算比较式结果,如果为真,执行否则,执行
由于比较式(=(cons 1000 "1")(cons 1000 "1") ...
在我看来,楼主是知道(=(cons 1000 "1")(cons 1000 "1"))返回的是NIL,所以if 表达式的返回结果才是2,
楼主的疑惑是= 后的两个表达式是一样的,为什么还返回nil ,这就是我在主贴上点评的= (equal to)的参数只适用于数值型或字符串型,而(cons 1000 "1")返回的结果是表,所以这就是我在一楼还有三楼nzl1116大师所回答的要用equal 函数原因,equal 函数是可以比较表(list)的
(equal expr1 expr2 )
expr1expr2
Type: Integer, Real, String, List, Ename (entity name)
(= numstr )
numstrType: Integer, Real, or StringA number or string.
(if (equal (cons 1000 "1")(cons 1000 "1")) 1 2) (if <比较式> <表示式1> [表示式2]) 检算比较式结果,如果为真,执行<表示式1>否则,执行<表示式2>
由于比较式(=(cons 1000 "1")(cons 1000 "1"))返回NIL,所以上面的命令结果返回2 因为条件表达式的值是nil,如果把函数=改成函数equal,那就返回1了。 谢谢各位的帮忙,我就在此一并感谢了
页:
[1]