Я пытаюсь сделать рекурсивную функцию, которая получает список пар строк-строк + строку с префиксом и использует функцию с именем «начинается с», она суммирует все ints, чьи начальные совпадения префикс. Проблема в том, что я никогда не могу получить список, чтобы идти вперед, он застревает в начале, а затем сбой программы.переопределяет список рекурсивных функций
(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) он переходит в состояние еще, как и ожидалось, но затем Ls возвращается вверх по одной линии в начало (с предыдущим значением) вместо перехода к следующему значению («aa» 33). Я новичок в схеме, и я не понимаю, почему это происходит, это расстраивает
Во-первых, избавиться от всех синтаксических ошибок. –
какие синтаксические ошибки? Компилятор racket не упоминал никого .. – mooly
Ну, есть синтаксические ошибки, и есть _syntax errors_. Сравните эти два выражения: '(list (+ 1 2))' и '(list + 1 2)'. Компилятор или интерпретатор не будут жаловаться на второй, потому что это совершенно законное выражение. Это также почти наверняка не то, что вы хотите. –