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
Scheme 学习向量_Scheme_Lisp_Racket - Fatal编程技术网

Scheme 学习向量

Scheme 学习向量,scheme,lisp,racket,Scheme,Lisp,Racket,我正在学习向量的工作原理。 我有两个向量,一个包含姓名,另一个包含“电话号码”。我编写了一个函数,将所有姓名和电话号码显示在一起: (define v4 (vector 'Tom 'Michael 'John 'Julia)) (define v5 (vector 2343 1343 2112 372637)) (define db (λ (n) (cond ((equal? (vector-length v4) n ) "stop" )

我正在学习向量的工作原理。 我有两个向量,一个包含姓名,另一个包含“电话号码”。我编写了一个函数,将所有姓名和电话号码显示在一起:

(define v4 (vector 'Tom 'Michael 'John 'Julia))
(define v5 (vector 2343 1343 2112 372637))

(define db (λ (n)
             (cond
               ((equal? (vector-length v4) n ) "stop" )
               (equal? 0 (display (vector-ref v4 n))
               (display " ")
               (display (vector-ref v5 n ))
               (displayln " ")
               (set! n (+ n 1))
               (db n)        
               ))))
(db 0) 
结果是:

Tom 2343 
Michael 1343 
John 2112 
Julia 372637 
"stop"

这样做对吗?有没有更好的方法呢?

这里有一个更简单的方法,在球拍,使用和。可以说,这更惯用,更容易理解:

(define (db v1 v2)
  (for ([name  (in-vector v1)]
        [phone (in-vector v2)])
    (printf "~a ~a~n" name phone))
  "stop")
即使我们只使用显式递归和标准过程来编写实现,也最好避免使用
set
要增加索引,请传递参数-包括要迭代的向量,无需参考全局定义:

(define (db v1 v2)
  (let loop ((idx 0))
    (cond ((>= idx (vector-length v1)) "stop")
          (else
           (display (vector-ref v1 idx))
           (display " ")
           (display (vector-ref v2 idx))
           (newline)
           (loop (+ idx 1))))))
无论哪种方式,假设两个向量具有相同的长度,它都会按预期工作:

(define v1 (vector 'Tom 'Michael 'John 'Julia))
(define v2 (vector 2343 1343 2112 372637))
(db v1 v2)

Tom 2343
Michael 1343
John 2112
Julia 372637
"stop"

太棒了!非常感谢。