Scheme(Racket)如果在cond内没有返回任何内容

时间:2012-09-18 15:04:06

标签: if-statement scheme racket

我一直在DrRacket工作,试图创建一个“前缀”功能(#lang racket)。它应该将两个列表作为输入,如果#t为空,或者等于pf的开头,则应输出ls

我的问题是,当pf不是ls的前缀且ls不为空时,我的代码似乎根本不会返回任何内容。如果我将if语句中的#f替换为其他内容(例如'()),它将正确返回,但如果我尝试捕获'()并根据该输出提供输出,它给出了没有意义的结果(比如说'()不为空,或者'()不等于'())。它似乎与在cond语句中使用if语句有关。谁能告诉我它在做什么,或者为什么?有可能使这段代码正常工作,还是我需要以另一种方式重做呢?

感谢您的帮助!

(define prefix
  (lambda (pf ls)
    (cond
      [(null? pf) #t]
      [(null? ls) #f]
      [(if (equal? (car pf) (car ls)) (prefix (cdr pf) (cdr ls)) #f)])
      ))

1 个答案:

答案 0 :(得分:8)

if条件下cond通常表明做错了。我想你的意思是这样说:

(define prefix
  (lambda (pf ls)
    (cond
      [(null? pf) #t]
      [(null? ls) #f]
      [(equal? (car pf) (car ls)) (prefix (cdr pf) (cdr ls))]
      [else #f])))