Что-то не так с моим кодом "сумма списка" в схеме? - PullRequest
0 голосов
/ 07 февраля 2019

Моя строка оператора else выдаёт мне ошибку.Влияет ли какая-либо другая моя строка кодов на выражение else?

(define (sumAdd list)
  (cond
    ((null? list) '())
    ((null? (cdr list)) list)
    ((symbol? list) sumAdd(cdr list))
    (else (+ (car list)(sumAdd (cdr list))))
    )
  )

1 Ответ

0 голосов
/ 07 февраля 2019

Если я правильно понимаю, вы хотите сложить все числа в списке со смешанными типами элементов.Если это так, в вашем коде есть несколько ошибок:

(define (sumAdd list)                 ; `list` clashes with built-in procedure
  (cond
    ((null? list) '())                ; base case must be zero for addition
    ((null? (cdr list)) list)         ; why discard the last element?
    ((symbol? list) sumAdd(cdr list)) ; that's not how procedures are called
    (else (+ (car list) (sumAdd (cdr list)))))) ; this line is fine :)

Это правильный способ реализации процедуры:

(define (sumAdd lst)
  (cond
    ((null? lst) 0)                           ; base case is zero
    ((symbol? (car lst)) (sumAdd (cdr lst)))  ; skip current element
    (else (+ (car lst) (sumAdd (cdr lst)))))) ; add current element

Это работает, как и ожидалось:

(sumAdd '(1 a 2 b 3 c))
=> 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...