我对球拍很新,我在将一个字符串转换为列表时遇到了麻烦。我正在为一个班级制作一个基本的boggle游戏,我不断从以下代码中得到这个错误:
汽车:合同违规 预期:对? 给出:“aarhus”< - 错误(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
)
)
)
这个函数应该做的是从单词列表中读取一个单词(a-word)返回#t IFF a-word中的所有字母都在a-list中。我认为我的问题是a-word正在以字符串形式读入。这就是我加入
的原因(cond
[(string? a-word)(string->list a-word)]
)
在函数的顶部。我希望它会将字符串转换为列表,但我仍然会收到此错误。想法?
答案 0 :(得分:2)
问题在于[(is-in (car a-word) a-rand-list) ...]
。
a-word
仍然是string
,因此您无法在其上调用car
。
我想你有两个单独的条件,首先将字符串“强制转换”为一个列表,然后在第二个条件用途中使用该列表?
((cond
[(string? a-word)(string->list a-word)]
)
如果这是你想要做的,你应该做(set! a-word (string->list a-word))
。这是因为string->list
会将字符串作为列表返回,但不会将其分配给a-word
。
PS:在这种情况下,我会将第一个条件更改为when
语句。