如何对Scheme / Lisp中的符号执行算术计算?

时间:2009-07-14 15:31:22

标签: lisp scheme type-conversion racket

我需要用符号执行计算。我需要将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)))

2 个答案:

答案 0 :(得分:4)

您可以找到string-split here的定义。它将使您能够在您选择的分隔符处拆分字符串。然后你可以像这样定义get-minutes:

(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 :(得分:1)

您需要转换为数值才能使计算有意义。 (小时(字符串 - >数字(字符串(第一次)))))分钟相同