Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 如何在列表中添加()?_List_Scheme_Multiplication - Fatal编程技术网

List 如何在列表中添加()?

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

如何在列表中添加括号?比如说,

(乘"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)) (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'()))
。尝试始终从头到尾构建列表,如果您需要相反的列表,则可能只需要在末尾使用
反转