基于加法函数的两个一元列表的乘法
Multiplication of two unary lists based on the addition function
(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)))
在 运行 代码中,它说参数不匹配。我哪里做错了?
您目前的做法似乎不对-递归调用放错了地方,报告的错误表明您忘记将第二个参数传递给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)
(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)))
在 运行 代码中,它说参数不匹配。我哪里做错了?
您目前的做法似乎不对-递归调用放错了地方,报告的错误表明您忘记将第二个参数传递给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)