(Arne Babenhauserheide)
2015-06-22: implement sxg->number implement sxg->number
diff --git a/examples/newbase60.w b/examples/newbase60.w --- a/examples/newbase60.w +++ b/examples/newbase60.w @@ -17,8 +17,7 @@ define base60numbers append map cons (string->list base60letters) : iota : string-length base60letters quote - : - #\l . 1 ; typo lowercase l to 1 + : #\l . 1 ; typo lowercase l to 1 #\I . 1 ; typo capital I to 1 #\O . 0 ; typo capital O to 0 @@ -26,15 +25,24 @@ define : integer->sxg num if : equal? 0 num . "0" let loop - : s '() - n num - if : equal? n 0 - list->string : reverse s - loop - cons - string-ref base60letters (remainder n 60) - . s - quotient n 60 + : s '() + n num + if : equal? n 0 + list->string s + loop + cons (string-ref base60letters (remainder n 60)) s + quotient n 60 + +define : sxg->number string + let loop + : n 0 + s string + if : equal? "" s + . n + loop + + : assoc-ref base60numbers : string-ref s 0 + * n 60 + string-drop s 1 define : main args - display : integer->sxg 61 + display : sxg->number : integer->sxg 60