Function 方案向量语法

Function 方案向量语法,function,vector,scheme,Function,Vector,Scheme,我在这里正确地使用了scheme中的绑定“向量”函数吗 (define (zip2 list1 list2) (if (null? list1) '() (vector (vector (car list1) (car list2)) (zip2 (cdr list1) (cdr list2))))) 是和否。在if语句中,后续返回一个列表,而备选返回一个向量。这不太可能是正确的。例如: > (zip2 '(a b) '(1 2)) #(#(a 1)

我在这里正确地使用了scheme中的绑定“向量”函数吗

(define (zip2 list1 list2)
 (if (null? list1)
   '()
   (vector (vector (car list1) (car list2))
           (zip2 (cdr list1) (cdr list2)))))

是和否。在
if
语句中,
后续
返回一个列表,而
备选
返回一个向量。这不太可能是正确的。例如:

> (zip2 '(a b) '(1 2))
#(#(a 1) #(#(b 2) ()))
你注意到里面的
()
?不好的。。。但是,这取决于你的具体问题,而你并没有真正说明这一点。修复方法可能很简单,只需将
'()
替换为
'#()

[编辑]现在我们知道了您的需要。这会让你达到目的:

(define (zip2 list1 list2)
  (map vector list1 list2))

> (zip2 '(10 20) '(1 2)) 
(#(10 1) #(20 2))

是和否。在
if
语句中,
后续
返回一个列表,而
备选
返回一个向量。这不太可能是正确的。例如:

> (zip2 '(a b) '(1 2))
#(#(a 1) #(#(b 2) ()))
你注意到里面的
()
?不好的。。。但是,这取决于你的具体问题,而你并没有真正说明这一点。修复方法可能很简单,只需将
'()
替换为
'#()

[编辑]现在我们知道了您的需要。这会让你达到目的:

(define (zip2 list1 list2)
  (map vector list1 list2))

> (zip2 '(10 20) '(1 2)) 
(#(10 1) #(20 2))

我认为结果不正确。如果我们运行问题中的过程,我们得到的是:

(zip2 '(1 2 3) '(4 5 6))
=> '#(#(1 4) #(#(2 5) #(#(3 6) ())))
正如你所看到的,有一些向量嵌套在向量中,比它们应该嵌套的更深。你的解决方案的问题是,你不能仅仅用向量来代替cons,而期望事情都是一样的
cons
可以在创建列表的过程中一次添加一个元素,但对于构建向量,您需要事先知道所有元素,因为创建向量后无法添加元素

我宁愿用“普通”的
zip
操作(使用列表的操作)来解决问题,然后将结果转换为向量:

(define (zip list1 list2)
  (map list list1 list2))

(zip '(1 2 3) '(4 5 6))
=> '((1 4) (2 5) (3 6))

(define (zip2 list1 list2)
  (list->vector
   (map list->vector (zip list1 list2))))

(zip2 '(1 2 3) '(4 5 6))
=> '#(#(1 4) #(2 5) #(3 6))
或等效,但不使用
zip
作为解决方案的一部分:

(define (zip2 list1 list2)
  (list->vector
   (map vector list1 list2)))

(zip2 '(1 2 3) '(4 5 6))
=> '#(#(1 4) #(2 5) #(3 6))

我认为结果不正确。如果我们运行问题中的过程,我们得到的是:

(zip2 '(1 2 3) '(4 5 6))
=> '#(#(1 4) #(#(2 5) #(#(3 6) ())))
正如你所看到的,有一些向量嵌套在向量中,比它们应该嵌套的更深。你的解决方案的问题是,你不能仅仅用向量来代替cons,而期望事情都是一样的
cons
可以在创建列表的过程中一次添加一个元素,但对于构建向量,您需要事先知道所有元素,因为创建向量后无法添加元素

我宁愿用“普通”的
zip
操作(使用列表的操作)来解决问题,然后将结果转换为向量:

(define (zip list1 list2)
  (map list list1 list2))

(zip '(1 2 3) '(4 5 6))
=> '((1 4) (2 5) (3 6))

(define (zip2 list1 list2)
  (list->vector
   (map list->vector (zip list1 list2))))

(zip2 '(1 2 3) '(4 5 6))
=> '#(#(1 4) #(2 5) #(3 6))
或等效,但不使用
zip
作为解决方案的一部分:

(define (zip2 list1 list2)
  (list->vector
   (map vector list1 list2)))

(zip2 '(1 2 3) '(4 5 6))
=> '#(#(1 4) #(2 5) #(3 6))

这可能是一个简单的答案,但我以前没有使用过向量,需要使用它们来绘制一些东西。预期的结果是什么?我正在尝试将列表X和Y“压缩”到数据点列表中。啊,请参阅我更新的答案。这可能是一个简单的答案,但是我以前没有使用过向量,需要使用它们来绘制一些东西。预期的结果是什么?我正在尝试将X和Y列表“压缩”到一个数据点列表中。啊,请参见我的更新答案。如果我用#()替换“()”,会完全消除()吗?如果我用#()替换“(),会完全消除()吗?