List 如何在列表中添加()?
如何在列表中添加括号?比如说, (乘"12"(1 2 3)) 它应该输出((1 2 3)(2 4 6)) 这就是我现在拥有的List 如何在列表中添加()?,list,scheme,multiplication,List,Scheme,Multiplication,如何在列表中添加括号?比如说, (乘"12"(1 2 3)) 它应该输出((1 2 3)(2 4 6)) 这就是我现在拥有的 (define multiply (lambda (los1 los2) (cond ((null? los1) '()) ((null? los2) '()) (else (cons (* (car los1) (car los2)) (append (multiply(list (car los1)) (cd
(define multiply
(lambda (los1 los2)
(cond
((null? los1) '())
((null? los2) '())
(else (cons (* (car los1) (car los2))
(append (multiply(list (car los1)) (cdr los2))
(multiply(cdr los1) los2)))))))
我得到的输出是(123246)
p/S:如果这是一个糟糕的问题或任何事情,请毫不犹豫地告诉我或责骂我。我正在尝试学习使用stackoverflow。思考输入和输出的含义。我想你不能用一个递归过程来实现这一点,但你可以用两个递归过程来实现
(list-multiply 5 '(1 2 3))
; ==> (5 10 15)
当你有了这个参数,你迭代第一个列表,并对每个元素使用list multiply
,当然第二个参数永远不会被迭代,它只是被传递
(multiply '(1 2) '(1 2 3))
; ==> (cons (list-multiply 1 '(1 2 3))
; (cons (list-multiply 2 '(1 2 3))
; '()))
; ==> ((1 2 3) (2 4 6))
您只需使用INFG高阶函数即可实现这一点:
(define (multiply lst1 lst2)
(map (lambda (e1)
(map (lambda (e2) (* e1 e2)) lst2))
lst1))
请注意双贴图
。一个迭代lst1
以生成结果中的元素,另一个map
将一个元素与列表中的每个元素相乘。您可能会认为,由于这两个递归函数看起来很相似,它们可能也有很多共同点
PS:学会在不使用列表
和附加
的情况下解决问题<代码>(列表1 2 3)只是一个相当于(cons 1(cons 2(cons 3’()))
和(append'(1 2 3)'(4 5 6))
相当于(cons 1(cons 2(cons 3'()))
。尝试始终从头到尾构建列表,如果您需要相反的列表,则可能只需要在末尾使用反转