常见前缀列表功能的问题

时间:2016-10-13 15:27:02

标签: functional-programming scheme logic racket

Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
// finally change the color
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    window.setStatusBarColor(Color.parseColor("#c2212a"));
}

此函数假设找到2个列表之间的最长公共前缀。因此,当我输入'(1 2)和'(1 2 3)时,我应该得到'(1 2)。但是,当我跑(长'(1 2)'(1 2 3))时,我得到((1 2)(2))。当我通过我的代码回溯我的步骤时,我似乎无法找到问题。有人可以帮我找到问题吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

一个简单的解决方案如下:

(define (long a b)
  (cond ((null? a) '())
        ((null? b) '())
        ((equal? (car a) (car b)) (cons (car a) (long (cdr a) (cdr b))))
        (else '())))

当列表终止时,前缀是空列表;如果两个car都相等,则结果是带有汽车的列表和列表cdr的最长前缀。否则,第一个元素的列表不同,因此结果是空列表。

答案 1 :(得分:0)

可以在这里使用带有条件的'for / list'循环:

column-width

输出:

container