【问题标题】:Multiplication of two unary lists based on the addition function基于加法函数的两个一元列表的乘法
【发布时间】:2015-10-12 22:35:42
【问题描述】:
(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)))

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

【问题讨论】:

    标签: list math scheme multiplication addition


    【解决方案1】:

    您当前的方法似乎不对-递归调用放错了位置,并且报告的错误表明您忘记将第二个参数传递给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)
    

    【讨论】:

    • @user5438439 我很高兴听到这个消息,我很高兴!
    猜你喜欢
    • 2019-06-07
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2012-05-03
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    相关资源
    最近更新 更多