Как вы выполняете арифметические вычисления на символах в Scheme / Lisp? - PullRequest
2 голосов
/ 14 июля 2009

Мне нужно выполнить расчеты с символом. Мне нужно преобразовать время в формате чч: мм в прошедшие минуты.

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

Это неправильный код, после всего этого преобразования я получаю символ и не могу выполнить правильный расчет.

Ребята, у вас есть предложения? Я не могу изменить тип ввода.
Контекст: входные данные представляют собой расписание полета, поэтому я не могу изменить структуру данных.

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

Edit: Разобрался с некрасивым решением. Пожалуйста, предложите что-нибудь получше.

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

Ответы [ 2 ]

4 голосов
/ 14 июля 2009

Вы можете найти определение для разделения строк здесь . Это позволит вам разбить строку на разделители по вашему выбору. Тогда вы можете определить get-минуты следующим образом:

(define (get-minutes time)
  (let* ((fields (string-split (symbol->string time) '(#\:)))
         (hour (string->number (first fields)))
         (minutes (string->number (second fields))))
    (+ (* hour 60) minutes)))
1 голос
/ 14 июля 2009

вам нужно преобразовать в числовые значения для ваших расчетов, чтобы иметь смысл. (час (строка-> число (строка (первый раз)))) то же самое для минуты

...