2016-06-12 6 views
1

私はこの言語で苦労しています。私はそれが偽であるときにのみ実行する条件を作ろうとしています。私は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"] 
) 

私の場合にはfalseを返し、リスト内の希望する値がある場合、基本的に私は、その後、私はmemqを求めています、キューを作成しています。そして今、私は "yaay"の部分を実行する必要があります。それをどうすれば実現できますか?私は偽を求めてみました、私は(= (#f) (memq 4 (queue->list p)))またはいくつかの単純なIFSを試してみましたが、それは動作しません。どちらか

答えて

3

あなたがなりたい条件をチェックする通常の方法:

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

は覚えているが、そのスキームでのみ偽の値が#fあり、他のすべてが真であると見なされる - null'()0""含め、など

この場合、memqはTを返します。 リストが見つかった場合は、そうでない場合は#fnotは結果を否定します。つまり、その要素がリストにない場合のみ条件が真となります。

最後に一つ - memqを比較するためのeq?を使用して、それがequal?を使用し、より一般的な(と私は、これはあなたのコードは期待通りに動作しない理由だと思う)である、memberを使用することをお勧めでしょう。この問題の原因を理解するには、equal?eq?の違いをドキュメントでお読みください。

関連する問題