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

use*_*546 4 scheme if-statement racket

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

我的问题是,当我的代码pf不是前缀ls而且ls不是null 时,它似乎根本不返回任何内容.如果我用#fif语句替换if语句,比如'(),它将正确地返回,但如果我尝试捕获'()并基于它而给出输出,它会给出没有意义的结果(比如说是'()不是't 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)])
      ))
Run Code Online (Sandbox Code Playgroud)

Chr*_*ung 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])))
Run Code Online (Sandbox Code Playgroud)