У меня есть некоторые проблемы с этой проблемой, которую мне дали. Это не домашняя работа, на самом деле это проблема, с которой я столкнулся на тесте, и чтобы углубить свое понимание, я хотел бы решить ее успешно.
Проблема в следующем:
создайте процедуру element-count, которая берет список пар "lst" и элемент "el" и возвращает список пар, где, если элемент "el" существует в "lst" в качестве первого члена, тогда второй член получает увеличено на 1. В конце «первой» мы добавим пару (минусы 1).
Требуемый результат: element-count '((a 2)) b) ->' ((a 2 (b 1))
Вот так выглядит мой код:
#lang sicp
(define (append list1 list2)
(if (null? list1)
list2
(cons (car list1) (append (cdr list1) list2))))
(define (count-element lst el)
(cond ((eq? (car lst) el) (+ (cdr lst) 1))
(else (append lst (cons (el 1))))))
Первая проблема, с которой я столкнулся, это то, что она говорит мне, что «b» не определено. Очевидно, что b не нужно определять, так как я хочу его в своем выводе. Как мне это исправить? Среда, в которой я работаю - это DrRacket.
Главный вопрос: как мне определить список пар? Или мой код на самом деле хорошо? Списки и пары все еще довольно запутаны, поэтому я прошу прощения за глупые вопросы.