0 не является функцией в схеме - PullRequest
0 голосов
/ 24 мая 2019

Я получаю сообщение об ошибке '0 не является функцией, когда я пытаюсь применить функцию sum-of-prefixes к списку чисел:

(define sum-of-prefixes
  (lambda (lat)
    (cond
     ((null? lat) '())
     ((null? (cdr lat)) (car lat))
     (else
      (sum-of-prefixes-b 0 lat '())))))

(define sum-of-prefixes-b
  (lambda (sum lat result)
    (cond
     ((null? lat) result)
     (else
      (sum-of-prefixes-b (+ sum (car lat)) (cdr lat) (cons (sum result)))))))

Я видел этот вопрос , который кажется похожим, но я не вижу в своем коде, где выражение может быть уменьшено до (0).

Вы можете попробовать оценить это здесь: https://repl.it/repls/GlamorousProbableBlocks

(сумма префиксов '(1 2 4)) Ошибка: 0 не является функцией [сумма префиксов, сумма префиксов-b, (anon)]

1 Ответ

2 голосов
/ 24 мая 2019

Ошибка в последней строке sum-of-prefixes-b. Должно быть:

(sum-of-prefixes-b (+ sum (car lat)) (cdr lat) (cons sum result))))))

вместо:

(sum-of-prefixes-b (+ sum (car lat)) (cdr lat) (cons (sum result)))))))

(sum result) интерпретируется как применение sum к result, но sum не является функцией, это переменная со значением 0.

И, возможно, вам следует изменить ((null? lat) result) в ((null? lat) (reverse result)), если вы хотите, чтобы суммы префиксов были в том же порядке, что и список, при условии, что я правильно понял значение функции. В этом случае я думаю, что вы также должны изменить вторую ветвь условия первой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...