4

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

我的问题是我的代码似乎根本不返回任何东西,pf而不是前缀ls并且ls不为空。如果我#f用其他东西替换 if语句'()'()'()'不为空,或者'()不等于'())。它似乎与在 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)])
      ))
4

1 回答 1

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])))
于 2012-09-18T16:17:08.800 回答