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)))
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top