【发布时间】:2009-07-14 15:31:21
【问题描述】:
我需要使用符号执行计算。我需要将 hh:mm 形式的时间转换为经过的分钟数。
;; (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)))
这是一个不正确的代码,经过所有转换后我得到了一个字符,无法执行正确的计算。
大家有什么建议吗?我无法更改输入类型。
上下文:输入是航班时刻表,因此我无法更改数据结构。
;; -------------------------------------------------- --------------------
编辑: 想出了一个丑陋的解决方案。请提出更好的建议。
(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)))
【问题讨论】:
-
你为什么称这个解决方案丑陋?使用这种输入格式,它几乎是最小的。
-
我讨厌硬编码(substring X 0 1)之类的东西,这根本没有意义。顺便说一句,字符串拆分功能很棒。
标签: lisp scheme type-conversion racket