2015-09-26 50 views
1

我對球拍相當陌生,而我在將一個字符串投射到列表時遇到了麻煩。我現在正在爲一類課程製作一個基本的boggle遊戲,並且我一直從下面的代碼中得到這個錯誤:難以投射字符串在球拍中列出

汽車:違反合同 預期:pair? 給出:「奧胡斯」 < --error

(define (word-is-in? a-word a-rand-list) 
    ((cond 
    [(string? a-word)(string->list a-word)] 
    ) 
    (cond 
    [(empty? a-word) #t] ;; Found all letters in a-word 
    [(empty? a-rand-list) #f] 
    [(is-in (car a-word) a-rand-list) 
     (word-is-in? (cdr a-word) 
        (remove-item (car a-word) a-rand-list)) 
    ] 
    [else #f] ;; first letter of a-word not in a-list 

) 
) 
) 

一下這個功能是應該做的,從字(詞)返回#T IFF一個字的所有字母的列表中一個字讀在一個列表中。我認爲我的問題是,一個單詞被讀入爲一個字符串。這就是爲什麼我加入

(cond 
    [(string? a-word)(string->list a-word)] 
) 

在函數的頂部。我希望它會將字符串轉換爲列表,但我仍然得到這個錯誤。思考?

回答

2

問題出在這裏[(is-in (car a-word) a-rand-list) ...]a-word仍然是string,因此您不能致電car就可以了。

我想你有2個單獨的條件首先「投」字符串到列表中,並在第二個條件使用該列表?

((cond 
    [(string? a-word)(string->list a-word)] 
    ) 

如果這就是你想要做的,你應該做(set! a-word (string->list a-word))。這是因爲string->list會將該字符串作爲列表返回,但不會將其分配給a-word

PS:在這種情況下,我會將第一個條件更改爲when聲明。

+0

謝謝!我認爲這是爲了這個功能。我的其他功能之一是現在正在竊聽,但我認爲這與我以前的問題沒有任何關係。 – Samariyu

+0

其實,我確實有一個關於我無法在網上找到的問題。當字符串設置爲列表時,它會變成一個字符列表還是單個字母字符串列表? – Samariyu

+0

做測試;)'(char?(car(string-> list「abc」)))'將返回#t,這意味着它是一個字符列表。然而,如果你需要一個字符串列表,你可以簡單地「映射」它,然後它變成'(set!a-word(map string(string-> list a-word)))''。 – HyperZ