Come si esegue calcoli aritmetici su simboli in Scheme / Lisp?
-
13-09-2019 - |
Domanda
Ho bisogno di eseguire calcoli con un simbolo. Ho bisogno di convertire il tempo che è di hh:. Modulo mm per il passare dei minuti
;; (get-minutes symbol)->number
;; convert the time in hh:mm to minutes
;; (get-minutes 6:19)-> 6* 60 + 19
(define (get-minutes time)
(let* ((a-time (string->list (symbol->string time)))
(hour (first a-time))
(minutes (third a-time)))
(+ (* hour 60) minutes)))
Si tratta di un codice errato, ho un carattere dopo tutto quello che la conversione e non può eseguire un calcolo corretto.
voi ragazzi avete qualche suggerimento? Non posso cambiare il tipo di ingresso.
Contesto: L'ingresso è un programma di volo e quindi non posso alterare la struttura dei dati
;; -------------------------------------------------- --------------------
Modifica: Capito una soluzione brutto. Si prega di suggerire qualcosa di meglio.
(define (get-minutes time)
(let* ((a-time (symbol->string time))
(hour (string->number (substring a-time 0 1)))
(minutes (string->number (substring a-time 2 4))))
(+ (* hour 60) minutes)))
Soluzione
È possibile trovare una definizione per la stringa-split qui . Essa vi permetterà di dividere una stringa in delimitatori di vostra scelta. Quindi è possibile definire get-minuti in questo modo:
(define (get-minutes time)
(let* ((fields (string-split (symbol->string time) '(#\:)))
(hour (string->number (first fields)))
(minutes (string->number (second fields))))
(+ (* hour 60) minutes)))
Altri suggerimenti
è necessario convertire i valori numerici per i vostri calcoli di dare un senso. (Ora (String> numero (string (prima a-time)))) stesso per minuto