过程在Scheme编程语言中自动输出#t或#f

时间:2014-06-07 06:27:25

标签: scheme

我从“The Little Schemer”开始学习计划,我正在使用Dr.Racket IDE。

(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?的空输出是false它输出#f但是我不想看到null的输出?程序。我只想#f如果lat?false#t lat?true

1 个答案:

答案 0 :(得分:0)

您看到的第一个#f来自(atom? '(a b c))。删除或注释掉该行。

如果您只想#t来自#flat?。更改您的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))))))