所以我目前停留在“简单”上?在球拍中发挥作用。它使用具有lambda语言的中级学生。
对此的一些限制是不允许递归,本地函数也不允许。它是简单明了的抽象列表函数。
此功能应该做的是获取一个数字列表,并输出一个对列表,其中每个对都具有第一个元素作为数字,而第二个元素是列表中已出现的数字。
例子:
(1 1 2 3) => ((1 2) (2 1) (3 1))
(2 3 4 3) => ((2 1) (3 2) (4 1))
我有一个通过输入数字列表和一个数字来产生出现次数的函数:
(define (occurrences lon n)
(length (filter (lambda (x) (= x n)) lon)))
我的方法显然是错误的:
(define (num-pairs-occurrences lon)
(list (lambda (x) (map (occurrences lon x) (remove x lon)) x))
我以为上面的方法可以工作,但是显然我的lambda放置不正确。有任何想法吗?
这比您想象的要棘手。您可能已经注意到,我们必须在输出列表中删除重复的元素。为此,最好定义一个remove-duplicates
辅助函数(也使用抽象列表函数)-实际上,它很常见,是Racket中的内置函数,但是在您当前的语言设置中不可用:
(define (remove-duplicates lst)
(foldr (lambda (e acc)
(if (member e acc)
acc
(cons e acc)))
'()
lst))
现在,可以使用抽象列表功能轻松组合解决方案:
(define (num-pairs-occurrences lon)
(map (lambda (e) (list e (occurrences lon e)))
(remove-duplicates lon)))
上面的返回和输出列表的顺序可能不同,但是没关系。在您提出以下要求之前:是的,我们确实需要该辅助功能。请不要没有它的解决方案...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句