私のコードでは、文字列中の単語の頻度を返す関数を書く必要があります。 (単語頻度「こんにちは人こんにちは」)私はこのエラーを取得する文字列内の単語の頻度を返す関数を書く
:私はそれをのような入力を与えるとき
(define (num-occurs sym lst)
(define (counter sym lst count)
(cond ((null? lst) count)
((equal? (car lst) sym) (counter sym (cdr lst) (+ 1 count)))
(else (counter sym (cdr lst) count))))
(counter sym lst 0))
(define (remove-all elem lst)
(if (null? lst)
'()
(if (equal? elem (car lst))
(remove-all elem (cdr lst))
(cons (car lst) (remove-all elem (cdr lst))))))
(define (word-frequencies str)
(let ((lst (string->list str)))
(if (null? lst)
'()
(append (list (cons (car lst) (num-occurs (car lst) lst)))
(word-frequencies (remove-all (car lst) (cdr lst)))))))
: は、これまでのところ私は、次のコードを持っています。 string-> list:契約違反 expected:文字列? が与えられました:(#\ i#\スペース#\ t#\ e#\ r#\ e#\スペース#\ p#\ e#\ r#\ s#\ o#
なぜこれがこれを行うのでしょうか? 私の最終的な出力は、次のようになります。
((HI。2)(そこに。1)(人。1))
は、文字のリストを返しますlist'はstring-> 'があることに注意してください
は、我々はまた、単語や周波数のペアを構築する機能を利用することができます記号ではありません。だから '(string-> list" hi ")'は '(#\ h#\ i)'を返します。 – PieOhPah
文字列からリストに直接どのようにすることができるか知っていますか?だからそれはちょうど '(hi there person hi)になります。 –
文字列を分割し、 'string-> symbol'を文字列の結果リストにマップすることができます。 '(マップ文字列 - >シンボル(文字列分割" hi there person hi "))'。 – assefamaru