我需要用符号执行计算。我需要它是HH的时间转换:对通过分毫米形式

;; (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)))
有帮助吗?

解决方案

您可以找到字符串分割这里的定义。这将使你在你所选择的分隔符拆分字符串。然后,你可以定义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)))

其他提示

您需要转换为你的计算是有道理的数值。 (小时(与字符串>数(串(第一一时间))))为相同分钟

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top