在计划和序言中计算相邻的重复项

时间:2017-05-04 09:50:00

标签: prolog scheme

我是计划和新闻的新手,并且只做了一些基本问题。 我需要在scheme和prolog中编写一个函数来计算列表中的相邻重复。

示例:(Count '(1, 1, 1, 2, 3, 3, 1))提供((3 1) (1 2) (2 3) (1 1))

我不想要代码,因为这是家庭作业,但任何提示或如何思考这个问题将不胜感激,因为我不知道从哪里开始。

1 个答案:

答案 0 :(得分:1)

让我们看一个假设的函数loop

(循环完成)

todo中的列表重写为您想要的格式 并且done包含已处理的部分。

(loop '(1 1 1 2 3 3 1) '())
(loop   '(1 1 2 3 3 1) '((1 1))
(loop     '(1 2 3 3 1) '((1 2))
(loop       '(2 3 3 1) '((1 3))
(loop         '(3 3 1) '((2 1) (1 3))
(loop           '(3 1) '((3 1) (2 1) (1 3))
(loop             '(1) '((3 2) (2 1) (1 3))
(loop              '() '((1 1) (3 2) (2 1) (1 3))
'((1 1) (3 2) (2 1) (1 3)

给定这样的函数loop,你可以写

(define (count xs) 
    (reverse loop xs '())

现在为了实施loop,您需要考虑以下情况:

1) todo is empty
2) done is empty
3) the first element of todo is different from the first element of done
3) the first element of todo is the same as the first element of done