文字列 - 整数対のリスト+ prefixという名前の文字列を取得しようとしていますが、 "starts-with"という名前の関数を使用すると、begininngが一致するすべてのint接頭辞。 問題は、私は前進するためにリストを得ることはできません、それは冒頭に立ち往生してプログラムがクラッシュすることです。スキーム再帰関数リストオーバーライド
私は入力で動作(define (sum-of-pairs-start-with prefix ls)
(let*( (prefix2 (string->list prefix))
(str2 (string->list (car (car ls)))))
(cond((null? str2) 0)
((starts-with prefix (car(car ls)))
(+ cdr(car ls) (sum-of-pairs-start-with prefix (cdr ls))))
(else sum-of-pairs-start-with prefix (cdr ls)))))
:
(sum-of-pairs-start-with "a" (list (cons "a" 1) (cons "b" 2) (cons "aa" 33) (cons "ca" 4))) ;; =34
が、私はリストの2番目のペアに得れば(「B」2)予想通り、それは他の条件になりますが、その後、LSは取り戻します次の値( "aa" 33)に進むのではなく、1行を元の値に戻します(前の値)。 私は「スキームに新しいMと私はそれが起こる理由を取得いけない、それはイライラ
まず、すべての構文エラーを取り除きます。 –
どの構文エラー?ラケットのコンパイラは何も言及しませんでした。 – mooly
まあ、構文エラーがあり、_syntax errors_があります。 '(list(+ 1 2))'と '(list + 1 2)'の2つの式を比較してください。コンパイラまたはインタプリタは、完全に合法的な表現であるため、第2のコンパイラまたはインタープリタは文句を言わないでしょう。あなたが望むものでもないことはほぼ確実です。 –