2012-09-18 90 views
4

我一直在DrRacket中嘗試創建一個「前綴」函數(#lang racket)。它應該以兩個列表作爲輸入,並且如果pf爲空或者等於ls的開頭,則應該輸出#tScheme(球拍)如果在cond中沒有返回任何東西

我的問題是,我的代碼似乎沒有返回任何東西,當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)]) 
    )) 

回答

8

一個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]))) 
+0

那麼,這確實回答我的問題和解決問題,謝謝。 – user1680546

相關問題