检查wheter语句的条件是错误的

时间:2016-06-12 13:09:30

标签: scheme racket

我有点挣扎于这种语言。我试图创造一个条件,只有当它是假的时才执行。我有一个返回false的函数,但我不知道该怎么做。请参阅以下代码:

(define p (make-queue))
(enqueue! p 1)
(enqueue! p 1)
(enqueue! p 2)
(enqueue! p 3)
(memq 5 (queue->list p))
(cond
  [(false? (memq 4 (queue->list p))) "yaay"]
  )

基本上我正在创建一个队列,然后我问memq,如果列表中有一个所需的值,在我的情况下返回false。现在我需要执行“yaay”部分。我怎样才能做到这一点?我试过要求假,我尝试了(= (#f) (memq 4 (queue->list p)))或一些简单的ifs,但这不起作用

1 个答案:

答案 0 :(得分:3)

检查所需条件的常用方法是:

(cond
  [(not (memq 4 (queue->list p))) "yaay"])

请记住,在Scheme中, false值为#f,其他所有内容都被视为正确 - 包括null'()0""等等。

在这种情况下,memq将返回以找到的搜索元素开头的列表,否则返回#fnot否定结果,意味着只有当元素不在列表中时条件才为真。

最后一件事 - memq使用eq?进行比较,最好使用member,它使用equal?并且更通用(而且我认为这就是你的代码没有按预期行事的原因);您应该在文档中阅读equal?eq?之间的区别,以了解其重要性。

相关问题