私はn次元ベクトルにアクセスしようとしていますが、私は無限の再帰に入ります

StackOverflow https://stackoverflow.com/questions/977201

  •  13-09-2019
  •  | 
  •  

質問

n次元ベクトルにアクセスしたいのですが、どういうわけか(空? '())falseを返し続けます。

;; n次元ベクトルにアクセスします
;; (Access-ND Vector A-List-of Numbers) - >要素
;; (access -nd(vector(vector 'x' y) 'a' b))0 1) - > x

(define (access-nd avector . alist)
  (cond
    ((and (not(empty? alist)) (vector? avector))
     (vector-ref (access-nd avector (rest alist)) (first alist)))
    (else avector)))

助けてください。

編集:修正コード

(define (access-nd avector . alist)
  (cond
    ((and (not(empty? alist)) (vector? avector))
     (apply access-nd (vector-ref avector  (first alist)) (rest alist)))
    (else avector)))
役に立ちましたか?

解決

おそらく、その1つの行が読み取る必要があります:

     (vector-ref (apply access-nd avector (rest alist)) (first alist)))

「適用」なしで、 alist 決して空になることはありません。その理由は次のとおりです。

の定義で access-nd alist パラメーターはオプションのパラメーターリストです。通常の位置パラメーターからドットで分離されています。これの意味は access-nd 1-nパラメーターで呼び出すことができます。最初のパラメーターの後の任意のパラメーターはリストに収集され、 alist. 。たとえば、次のように呼び出します

(access-nd v 1 2 3) 

原因になります alist リストにバインドされます (1 2 3). 。同様に、元のコードでのこの呼び出し:

(access-nd avector (rest alist))

原因になります alist 1つの要素を持つリストにバインドされます。それが理由です alist 決して空になることはありません。

スキーム apply, 一方、引数のリストを最後のパラメーターとして撮影し、通常の方法で渡されたかのように関数を呼び出します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top