无法在球拍中将字符串转换为列表

时间:2015-09-26 23:13:35

标签: racket

我对球拍很新,我在将一个字符串转换为列表时遇到了麻烦。我正在为一个班级制作一个基本的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)]
)

在函数的顶部。我希望它会将字符串转换为列表,但我仍然会收到此错误。想法?

1 个答案:

答案 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语句。