Comment pouvez-vous effectuer des calculs arithmétiques sur les symboles dans le schéma / Lisp?

StackOverflow https://stackoverflow.com/questions/1126201

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)))
Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top