2017-10-10 9 views
0

여기 해시 테이블을 만들고 목록을 기반으로 해시 테이블에 벡터를 추가하려는 시도입니다.스키마에서 해시 테이블에 벡터를 추가하는 방법은 무엇입니까?

#<procedure> 

지금 내가 포함 된 벡터의 크기를 얻어서 해시 테이블을 조회하려고합니다 :

(define *function-table* (make-hash)) 
(define (function-get key)(hash-ref *function-table* key)) 
(define (function-put! key value)(hash-set! *function-table* key value)) 
(define arguments '(myVector 5)) 
(lambda(pair)(function-put! (car pair) (make-hash (cadr pair))) arguments) 

나는 다음과 같은 메시지가 나타납니다.

(vector-length (function-get myVector)) 

오류 메시지 : 해시 테이블에 벡터를 추가하기 위해

myVector: undefined; 
cannot reference undefined identifier 
    context...: 
+0

반응식은 [화장 hashtable' ']가'루사-hash'하지 않지만 (http://www.r6rs.org/final/html/r6rs-lib/r6rs- lib-ZH-14.html)과 SRFI-125 (https://srfi.schemers.org/srfi-125/srfi-125.html)의'make-hash-table'도 새로 만든 것입니다. R7RS- 표준은 아직 확정되지 않았습니다. – Sylwester

답변

0

, 당신은 실제로 만들 필요는 벡터를 말하고, 추가합니다. 예를 들어, 당신이 arguments을 정의 할 때와 같이 인용 목록을 사용하는 경우, 첫 번째 요소 즉, 실제로 상징이라고

(define table (make-hash))   ;; create new mutable hash table 
(define vec (make-vector 10 5)) ;; create new vector 
(hash-set! table 'myVector vec) ;; add vector to hash, key='myVector, value=vec 
(hash-ref table 'myVector)   ;; retrieve hash value for specified key 
#(5 5 5 5 5 5 5 5 5 5) 

참고. 'myVector. 따라서이를 해시 키로 언급하려면 이름에 따옴표를 추가해야합니다 ((function-get 'myVector)).

다음
(define *function-table* (make-hash)) 

(define (function-get key) 
    (hash-ref *function-table* key)) 

(define (function-put! key value) 
    (hash-set! *function-table* key value)) 

(define arguments (list 'myVector (make-vector 10 5))) 

((lambda (pair) 
    (function-put! (car pair) (cadr pair))) 
arguments) 

당신이 할 수 있습니다 :

(vector-length (function-get 'myVector)) 
=> 10 

편집 :

는 다음과 같은 고려 arguments 만들어야하는 이름과 벡터의 크기를 포함하는 목록 인 경우 해시에 추가하면 다음을 수행 할 수 있습니다.

(define arguments '(myVector 5)) 
((lambda (pair) 
    (function-put! (car pair) (make-vector (cadr pair)))) 
arguments) 
다음 451,515,

,

(function-get 'myVector) 
=> #(0 0 0 0 0) 
(vector-length (function-get 'myVector)) 
=> 5 
+0

나는 견적의 정의를 정말로 이해하지 못했다. 나는 온라인으로 몇몇 기사를 읽고 이것들은 상수가 무언가를 상수로 바꾸는데 사용된다는 말을하고있다. 견적이 무엇을 의미하는지 자세히 설명해 주시겠습니까? 왜 make vector 문에서 두 개의 인수를 사용합니까? – Daniel

+0

아마도 이것은 당신에게 좋은 개요를 줄 것입니다 : [견적과 목록의 차이점은 무엇입니까] (https://stackoverflow.com/questions/34984552/what-is-the-difference-between-quote-and-list). – assefamaru

+0

'make-vector'는 예제 벡터로 간단하게'(make-vector 10 5)'를 사용했습니다. 10은 벡터에 처음에 얼마나 많은 슬롯을 넣을지를 지정하고, 5는 각 슬롯의 값을 나타냅니다. ['make-vector'] (https://docs.racket-lang.org/reference/vectors.html?q=make-vector#%28def._%28%28quote._~23~25kernel%29)를보십시오. _make- 벡터 % 29 % 29). 'vector' 또는'(make-vector 0)'를 사용하여 빈 벡터를 초기화 할 수 있습니다. – assefamaru