newLISP Fan Club

Forum => newLISP in the real world => Topic started by: hilti on May 02, 2011, 10:58:33 PM

Title: Autoincrement keys for hash tree
Post by: hilti on May 02, 2011, 10:58:33 PM
Hi!



I'm stucked in generating auto increment keys for a hash tree. Here's my approach:



(new Tree 'products)

(define (highest-key tree)
(if-not (empty? (tree))
(begin
(println "Tree is not empty.")
(string (inc (integer (first (last (sort (tree)) <)))))
)
(begin
(println "Tree is empty.")
(string (integer 1))
)
)
)

(products (highest-key products) "hello")
(products (highest-key products) "hello")
(products (highest-key products) "hello")
(products (highest-key products) "hello")
(products (highest-key products) "hello")
(products (highest-key products) "hello")
(products (highest-key products) "hello")
(products (highest-key products) "hello")
(products (highest-key products) "hello")
(products (highest-key products) "hello")
(products (highest-key products) "hello")
(products (highest-key products) "hello")

(products)


The thing is: hash keys have to be strings, right? And that's why I get in troubles on sorting this list, which (products) returns.



(("1" "hello") ("10" "hello") ("2" "hello") ("3" "hello") ("4" "hello") ("5" "hello")
 ("6" "hello")
 ("7" "hello")
 ("8" "hello")
 ("9" "hello"))


Is there another approach for hash keys? What are You guys using?



Cheers

Hilti
Title: Re: Autoincrement keys for hash tree
Post by: Lutz on May 03, 2011, 05:13:18 AM

> (new Tree 'Hash)
Hash
> (Hash (format "%05d" (inc Hash:counter)) "A")
"A"
> (Hash (format "%05d" (inc Hash:counter)) "B")
"B"
> (Hash)
(("00001" "A") ("00002" "B"))
> (symbols Hash)
(Hash:Hash Hash:_00001 Hash:_00002 Hash:counter)
>


The variable 'Hash:counter' is automatically created when newLISP reads the statement and 'inc' brings it from 'nil' to 0. The format makes sure that the sort order is Ok.
Title: Re: Autoincrement keys for hash tree
Post by: hilti on May 03, 2011, 05:36:55 AM
Thanks Lutz! Your solution works great. I think this is a cool snippet for the Code Patterns documentation.