基于加法函数的两个一元列表的乘法

时间:2015-10-12 22:35:43

标签: list math scheme multiplication addition

(define unary-add
  (lambda (list1 list2)
    (if (pair? list1)
        (cons (car list1)
              (unary-add (cdr list1) list2))
        list2)))

我在上面添加了两个列表的一元表示。现在我想将它们相乘,考虑乘法作为重复加法。 所以,我使用了这个函数,并做了以下的事情:

(define unary-mul
  (lambda (list1 list2)
    (if (pair? list1)
        (cons (car list1)
              (unary-mul (unary-add (cdr list1) list2)))
        list2)))

在运行代码时,它表示参数不匹配。我哪里出错了?

1 个答案:

答案 0 :(得分:2)

您当前的方法似乎不正确 - 递归调用放错地方,并且报告的错误表明您忘记将第二个参数传递给unary-mul。试试这个:

(define unary-mul
  (lambda (list1 list2)
    (if (pair? list2)
        (unary-add list1
                   (unary-mul list1 (cdr list2)))
        '())))

说明:乘法只是重复添加,在上面的代码中,我们不断添加list1并减少list2的长度,直到它为空。它按预期工作:

(unary-mul '(x x x) '(x x))
=> '(x x x x x x)