If statement 如果在cond内,则方案(球拍)不返回任何内容
我一直在DrRacket工作,试图创建一个“前缀”函数(#lang racket)。它应将两个列表作为输入,如果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语句有关。谁能告诉我它在做什么,或者为什么?是否有
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])))
这确实回答了我的问题,解决了问题,谢谢。