Here is my new candidate for an intern(string) function in Nim: import lists var lst = initSinglyLinkedRing[string]() var tbl = initTable[string, ref SinglyLinkedNodeObj[string]]() proc intern(s: string): ref SinglyLinkedNodeObj[string] = if s in tbl: return tbl[s] else: lst.append(s) tbl[s] = lst.tail return tbl[s] var a = "hello" var b = "hello" a = intern(a).value b = intern(b).value echo "a = ", a echo "b = ", b assert (a == b) assert (intern(a) == intern(b)) echo "len(T) = ", len(tbl) ## len(T) -> 1, not 2, as expected. Run
- String "interning" attempt Serge
- String "interning" attempt Serge
- String "interning" attempt cblake
- String "interning" attempt shirleyquirk
- String "interning" attempt Serge
- String "interning" attempt cblake
- String "interning" attempt cblake
- String "interning" attempt Serge
- String "interning" attempt shirleyquirk
- String "interning" attempt cblake
- String "interning" attempt Serge
- String "interning" attempt shirleyquirk
- String "interning" attempt cblake
- String "interning" attempt cblake
- String "interning" attempt Serge
- String "interning" attempt cblake
- String "interning" attempt Serge
- String "interning" attempt cblake
- String "interning" attempt cblake
- String "interning" attempt cblake
- String "interning" attempt rahulmittal79