Tonwertfunktion (Tonwert ‘(eins zwei drei) -> 123

Nach der Lösung vonWie schreibt man eine Zahl im Schläger? (spellNum) , jetzt versuche ich, eine Funktion zu schreiben, die dieser Funktion entgegengesetzt ist. d.h.

(tonumber ‘(one two three) --> 123

Bisher habe ich diesen Arbeitscode geschrieben

(define (symbol->digit n)
  (case n
    ('zero 0)
    ('one 1)
    ('two 2)
    ('three 3)
    ('four 4)
    ('five 5)
    ('six 6)
    ('seven 7)
    ('eight 8)
    ('nine 9)
    (else (error "unknown symbol:" n))))



(define (numlist n)
  (map symbol->digit  n))



(numlist '(one two three))

Von numlist habe ich '(1 2 3). Aber um es gibt ein Problem in der Funktion unten, in der ich Liste in Zahl umwandeln möchte

(define (list->number l)
  (set! multiplier (* 10 (lenght l)))
  (for/list [(c l)] 
    (* multiplier c))
  (set! multiplier (/ multiplier 10)))

(list->number '(1 2 3))

Jede Hilfe wird geschätzt. Ich kann nicht alle Arten von Loops online dokumentieren. beimhttp://docs.racket-lang.org/ts-reference/special-forms.html?q=loop#%28part._.Loops%29

Ich möchte mich mit Racket vertraut machen, um integrierte Konvertierungsfunktionen zu vermeiden. In Liste-> Nummer versuche ich, Ziffern einzeln aus der Liste zu nehmen, und dann möchte ich sie mit 10.100.1000 multiplizieren, je nach Länge der Liste. damit es eine Nummer zurückgeben kann. Zum Beispiel '(1 2 3) = 1 * 100 + 2 * 10 + 3 * 1

Antworten auf die Frage(3)

Ihre Antwort auf die Frage