Como você executar cálculos aritméticos sobre símbolos no Esquema / Lisp?
-
13-09-2019 - |
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)))
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