Implement ldict-ref.
This commit is contained in:
		
							parent
							
								
									a5ed5bca53
								
							
						
					
					
						commit
						1df2792838
					
				
					 2 changed files with 21 additions and 7 deletions
				
			
		|  | @ -97,13 +97,16 @@ | |||
|  ;; is provided it is used as default value in case the key does not | ||||
|  ;; exist. If only two arguments are given and the key does not exist, | ||||
|  ;; raises an error. | ||||
|  (define (dict-ref d k . r) | ||||
|    (let ((p (assq k d))) | ||||
|      (if p | ||||
| 	 (cdr p) | ||||
| 	 (if (null? r) | ||||
| 	     (error 'dict-ref "Key does not exist" k) | ||||
| 	     (car r))))) | ||||
|  (define (ldict-ref ld k . ds) | ||||
|    (let ((equality? (ldict-equality? ld))) | ||||
|      (let loop ((pairs (ldict-pairs ld))) | ||||
|        (if (null? pairs) | ||||
| 	   (if (null? ds) | ||||
| 	       (error 'ldict-ref "Key does not exist" k) | ||||
| 	       (car ds)) | ||||
| 	   (if (equality? (caar pairs) k) | ||||
| 	       (cdar pairs) | ||||
| 	       (loop (cdr pairs))))))) | ||||
| 
 | ||||
|  ;; Returns a new dictionary based on d with key k removed. If it | ||||
|  ;; doesn't contain the key, an error is raised. | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue