HGHG011 发表于 2015-7-31 15:47:01

《菜鸟提问》求解释(if (=(cons 1000 "1")(cons 1000 "1")) 1 2)


[*](if (=(cons 1000 "1")(cons 1000 "1")) 1 2)
[*]为什么上面的命令结果是返回2呢?
[*]求解释

lucas_3333 发表于 2015-7-31 15:47:02

本帖最后由 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.

lucas_3333 发表于 2015-7-31 16:05:01

(if (equal (cons 1000 "1")(cons 1000 "1")) 1 2)

xiang19751218 发表于 2015-7-31 18:21:08

(if <比较式> <表示式1> [表示式2])   检算比较式结果,如果为真,执行<表示式1>否则,执行<表示式2>
由于比较式(=(cons 1000 "1")(cons 1000 "1"))返回NIL,所以上面的命令结果返回2

nzl1116 发表于 2015-7-31 19:26:05

因为条件表达式的值是nil,如果把函数=改成函数equal,那就返回1了。

HGHG011 发表于 2015-8-1 09:33:43

谢谢各位的帮忙,我就在此一并感谢了
页: [1]
查看完整版本: 《菜鸟提问》求解释(if (=(cons 1000 "1")(cons 1000 "1")) 1 2)