Comment pouvez-vous effectuer des calculs arithmétiques sur les symboles dans le schéma / Lisp?
-
13-09-2019 - |
Question
Je dois effectuer des calculs avec un symbole. Je dois convertir le temps qui est hh:. Mm forme au procès-verbal passé
;; (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)))
Ceci est un code incorrect, je reçois un caractère après tout ce que la conversion et ne peut pas effectuer un calcul correct.
Avez-vous les gars avez des suggestions? Je ne peux pas changer le type d'entrée.
Contexte: L'entrée est un horaire de vol je ne peux pas modifier la structure de données
;; -------------------------------------------------- --------------------
Edit: Façonnés à une solution laide. S'il vous plaît suggérer quelque chose de mieux.
(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)))
La solution
Vous pouvez trouver une définition pour string-split . Il vous permettra de découper une chaîne à délimiteurs de votre choix. Ensuite, vous pouvez définir get minutes comme ceci:
(define (get-minutes time)
(let* ((fields (string-split (symbol->string time) '(#\:)))
(hour (string->number (first fields)))
(minutes (string->number (second fields))))
(+ (* hour 60) minutes)))
Autres conseils
vous devez convertir en valeurs numériques pour vos calculs de sens. (Heure (string-> numéro (chaîne (première à temps)))) même pour minute