2016-06-12 50 views
1

我有點困惑於這種語言。我試圖提出一個條件,只有當它是假的時候才執行。我有一個返回false的函數,但我不知道如何去做。請參見下面的代碼:檢查wheter語句是否爲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)))或一些簡單的如果,但是,這並不工作,要麼

回答

3

通常的方法來檢查你想會是條件:

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

請記住,在計劃的假值#f,一切被認爲是真實的 - 包括null'()0""

在這種情況下,memq將返回ŧ他列表,如果它被發現搜索的元素開頭,否則#fnot否定結果,這意味着只有當元素不在列表中時條件爲真。

最後一兩件事 - memq使用eq?比較,這是一個好主意,用member,它使用equal?而且是更普遍的(我想這就是爲什麼你的代碼並不像預期的原因);您應該在文檔中閱讀equal?eq?之間的區別以瞭解爲什麼這很重要。