Pergunta

Eu preciso realizar cálculos com um símbolo. Eu preciso converter o tempo que é de hh: mm formulário para os minutos passavam

.
;; (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)))

Este é um código errado, eu recebo um personagem depois de tudo que a conversão e não pode executar um cálculo correcto.

Vocês têm alguma sugestão? Eu não posso mudar o tipo de entrada.
Contexto:. A entrada é um horário de voo por isso não pode alterar a estrutura de dados

;; -------------------------------------------------- --------------------

Edit: Descobriu uma solução feio. Por favor sugerir algo melhor.

(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)))
Foi útil?

Solução

Você pode encontrar uma definição para corda-split aqui . Ele permitirá que você dividir uma string em delimitadores de sua escolha. Em seguida, você pode definir get-minutos como este:

(define (get-minutes time)
  (let* ((fields (string-split (symbol->string time) '(#\:)))
         (hour (string->number (first fields)))
         (minutes (string->number (second fields))))
    (+ (* hour 60) minutes)))

Outras dicas

Você precisa converter os valores numéricos para os seus cálculos a fazer sentido. (Hora (String> número (string (primeiro uma vez)))) mesmo para minutos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top