2012-10-26 80 views
1

我嘗試在球拍中使用assoc創建一個備忘表,並希望將有序對(x,y)與一個值相關聯,但我對語法有點不清楚。澄清球拍中的`assoc`語法

比如我有:

[f (lambda (x y) 
       (let ([ans (assoc [x y] memo)]) 

但它是不正確的。

回答

2

assoc程序接收的第一個參數的「鑰匙」,你要尋找的元素,並作爲第二個參數關聯的列表 - 在這種情況下,一個協會只是一個鍵值對。它將返回與給定密鑰對應的第一個關聯,如果沒有找到,則返回#f。例如:

(assoc 'x '((a 1) (b 2) (x 3) (c 4))) 
> '(x 3) 

如果您需要使用雙鑰匙,這很好,它會像這樣:

(assoc (list 1 2) '(((1 2) x) ((3 4) y))) 
> '((1 2) x) 
+0

當然,如果你打算做的是用一對值作爲關聯的「關鍵」部分,那很好。這工作:'(assoc'(1 2)'(((1 2)x)((3 4)y)))'=>''((1 2)x)' –

3

要增加,在專業級的球拍,你也可以使用hash tables來建立一個查找表。

(define table (make-hash)) 
(hash-set! table 'password "location-of-treasure") 
(printf "Where is the treasure? ~s\n" (hash-ref table 'password))