Scheme 检查列表是否不为空的最佳方法?

Scheme 检查列表是否不为空的最佳方法?,scheme,Scheme,在CommonLisp中,如果我想检查列表是否为null,我可以简单地使用列表本身作为条件,因为所有非nil列表都被视为true。然而,我发现在Scheme中,这样做会使Scheme认为我正在尝试调用一个函数。有没有更好的方法来检查Scheme中的列表是否为null,而不是定义另一个函数来执行(not(null?x))?如果你知道它是一个列表,你可以使用(pair?x),因为在Scheme中,每个列表都是一对或(,所有不是的东西都是真实的,所以()在if语句中被视为#t 因此, 使用(not(n

在CommonLisp中,如果我想检查列表是否为null,我可以简单地使用列表本身作为条件,因为所有非nil列表都被视为true。然而,我发现在Scheme中,这样做会使Scheme认为我正在尝试调用一个函数。有没有更好的方法来检查Scheme中的列表是否为null,而不是定义另一个函数来执行
(not(null?x))

如果你知道它是一个列表,你可以使用
(pair?x)
,因为在Scheme中,每个列表都是一对或

,所有不是
的东西都是真实的,所以
()
if
语句中被视为
#t

因此,

使用
(not(null?x))
是检查列表是否不为null的最直接的方法:它准确地描述了您想要的内容,在某些情况下,如果您得到的不是列表的内容,它将为您提供不同的行为:

(if (not (null? #t)) "true" "false") => "true"
(if (not #t) "true" "false") => "false"

“将使Scheme认为我正在尝试调用函数”是什么意思?@leppie Scheme抱怨,如果我使用列表(作为函数参数传递)作为条件。我在谷歌上查到了投诉,显然Scheme试图用列表中第一项的名称调用该函数,由于该函数不存在,Scheme投诉听起来好像你没有引用列表,low
(1 2 3)
vs
”(1 2 3)
,后者是正确的。空列表也需要被引用,iow
”()
@leppie但我不能在使用函数参数时引用,因为我将告诉Scheme使用符号而不是变量指向的列表,我不知道你的意思,请提供一些代码示例,你期望的是什么,你实际得到的是什么,错误消息以及您的方案实施也受欢迎。
(if (not (null? #t)) "true" "false") => "true"
(if (not #t) "true" "false") => "false"