【发布时间】:2016-01-16 22:21:37
【问题描述】:
我想就以下问题向您寻求帮助:
当我在列表上应用一个过程元素数时,我需要得到一个对的列表,其中在对中的第一位是元素,在第二位(点之后)有一个列表中出现的元素数。
例如,输入以下内容时:
(number-of-elements '((a b c) a (b c) c (a b b)))
我知道了:
((a . 3) (b . 4) (c . 3))
到目前为止,我有一个处理常规列表 (a b a d) 的代码。
(define number-of-elements
(lambda (lst)
(define exclude
(lambda (sznm key)
(foldr (lambda (ass result)
(if (equal? (car ass) key)
result
(cons ass result)))
'()
sznm)))
(foldr (lambda (key bag)
(cond ((assoc key bag)
=> (lambda (old)
(let ((new (cons key (+ (cdr old) 1))))
(cons new (exclude bag key)))))
(else (let ((new (cons key 1)))
(cons new bag)))))
'()
lst)))
但如果我使用它:
(number-of-elements '((a b c) a (b c) c (a b b)))
我知道了:
(((a b c) . 1) (a . 1) ((b c) . 1) (c . 1) ((a b b) . 1))
我知道我需要使用深度递归,但我不知道如何将它实现到我实际拥有的代码中。
【问题讨论】:
-
请贴出你目前写的代码,指出具体的实现问题。
-
我发布了您要求我提供的代码。谢谢。