在列表中查找字符串

时间:2014-01-29 05:19:38

标签: scheme racket

我试图修改我在SOF上发现的元音代码,发布如下,我试图将其变成单词列表,以便我可以检查单词是否在列表中。但我不断收到错误:

;; A list of words
(define words-list (cons #\dog (cons #\pig )
;; split-string : string -> (listof string-pieces)
;; converts a string into a list of string pieces.
(define (split-string a-string)
  (string->list a-string))
;; has-word? : string-piece -> boolealn
;; checks whether a string-piece is a vowel
(define (has-word? string-piece words)
  (cond ((empty? words) false)
    ((equal? string-piece (first words)) true)
    (else (has-word? string-piece (rest words)))))
;; Test
(check-expect (has-word? #\i word-list) true)
(check-expect (has-word? #\x word-list) false)
;; contains-words-list : (listof string-pieces) -> boolean
;; determines whether any items on a list of string-pieces
;; contains a piece that represents a word, from a list of words.
(define (contains-words-list losp)
  (cond ((empty? losp) false)
        ((false? (has-word? (first losp) words-list))
         (contains-words-list (rest losp)))
        (else (has-word? (first losp) words-list))))
;; Test
(check-expect (contains-word-list (cons #\h (cons #\i empty))) true)
(check-expect (contains-word-list (cons #\h (cons #\h empty))) false)
;; contains-word? : string -> boolean
;; checks whether a string contains a vowel.
(define (contains-word? a-string)
  (contains-word-list (split-string a-string)))
;; Test
(check-expect (contains-word? "pig") true)

我不断收到错误,例如狗和猪的缺点太大,而且它不会产生正确的输出,任何指导都会很棒

2 个答案:

答案 0 :(得分:0)

    ;; A list of words
    (define words-list (cons "dog" (cons "pig" '())))
    ;; split-string : string -> (listof string-pieces)
    ;; converts a string into a list of string pieces.
    (define (split-string a-string)
      (string->list a-string))
    ;; has-word? : string-piece -> boolealn
    ;; checks whether a string-piece is a vowel
    (define (has-word? string-piece words)
      (cond ((null? words) #f)
        ((equal? string-piece (car words)) #t)
        (else (has-word? string-piece (cdr words)))))

    ;; contains-words-list : (listof string-pieces) -> boolean
    ;; determines whether any items on a list of string-pieces
    ;; contains a piece that represents a word, from a list of words.
    (define (contains-words-list losp)
      (cond ((null? losp) #f)
            ((false? (has-word? (car losp) words-list))
             (contains-words-list (cdr losp)))
            (else (has-word? (car losp) words-list))))

    ;; contains-word? : string -> boolean
    ;; checks whether a string contains a vowel.
    (define (contains-word? a-string)
      (contains-word-list (split-string a-string)))

答案 1 :(得分:0)

创建字符串列表的语法错误:

> (cons #\dog (cons #\pig ))
Unhandled exception
 Condition components:
   1. &lexical
   2. &message: "invalid syntax"
   3. &irritants: (#\d #\o)
   4. &source-position:
       file-name: *stdin*
       character: 10

你错过了parens。尝试

(list "dog" "pig")

代表word-list。由于类似的原因,您的check-expect表单也是错误的。