2014-06-07 44 views
0

我開始從「The Little Schemer」學習方案,並使用Dr.Racket IDE。程序在Scheme編程語言中自動輸出#t或#f

(define atom? 
    (lambda (x) 
    (and (not (null? x)) (not (pair? x))))) 

(atom? '(a b c)) 

(define lat? 
    (lambda (x) 
    (cond 
     ((null? x) #t) 
     ((atom? (car x)) (lat? (cdr x))) 
     (else "It is not a lat")))) 

(lat? '(a b c J)) 

這是我的代碼來查找給定的列表是否只包含原子。 每當我給任何列表以外的空列表, 首先它執行第一個cond,如果列表是null,因爲它不爲空輸出的null?是假的它輸出#f但我不想看到輸出的空?程序。我只是想#f如果是lat?false#t如果lat?true

回答

0

你看到的第一個#f(atom? '(a b c))。刪除或註釋該行。

如果您只想要#t#f來自lat?。改變你的else條款:

(define lat? 
    (lambda (x) 
    (cond 
     ((null? x) #t) 
     ((atom? (car x)) (lat? (cdr x))) 
     (else #f)))) 

或者乾脆

(define lat? 
    (lambda (x) 
    (or (null? x) 
     (and (atom? (car x)) (lat? (cdr x))))))