If statement 如果在cond内,则方案(球拍)不返回任何内容

If statement 如果在cond内,则方案(球拍)不返回任何内容,if-statement,scheme,racket,If Statement,Scheme,Racket,我一直在DrRacket工作,试图创建一个“前缀”函数(#lang racket)。它应将两个列表作为输入,如果pf为空或等于ls的开头,则应输出#t 我的问题是,当pf不是ls的前缀且ls不为空时,我的代码似乎根本不返回任何内容。如果我将If语句中的#f替换为其他内容,如'(),它将正确返回该值,但是如果我尝试捕获'()并基于该值给出输出,它会给出没有意义的结果(比如说'()不是null,或者'()不等于'())。它似乎与cond语句中包含if语句有关。谁能告诉我它在做什么,或者为什么?是否有

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

我的问题是,当
pf
不是
ls
的前缀且
ls
不为空时,我的代码似乎根本不返回任何内容。如果我将If语句中的
#f
替换为其他内容,如
'()
,它将正确返回该值,但是如果我尝试捕获
'()
并基于该值给出输出,它会给出没有意义的结果(比如说
'()
不是null,或者
'()
不等于
'()
)。它似乎与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)])
      ))

cond
条件下出现
if
通常是做错事的标志。我想你是想说:

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

这确实回答了我的问题,解决了问题,谢谢。