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

如何在Scheme/Lisp中对符号执行算术计算?,lisp,scheme,type-conversion,racket,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))) (hou

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

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

您可以找到字符串拆分的定义。它将使您能够在选择的分隔符处拆分字符串。然后您可以这样定义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)))

(第一次)将是一个角色。我被卡住了。哦,(字符->整数…)好吧,很抱歉,再也不要偷懒了(字符串->数字(字符串(第一次)))会给你你想要的。Ellen会讨厌我的(我是新诱惑者)哇,忘了链接。现在添加了它。由于问题被标记为“plt方案”,您可以使用(regexp split#rx):“时间”--不需要字符串拆分代码。为什么称该解决方案为丑陋?这种输入格式几乎可以做到最小。我讨厌硬编码(子字符串X 0 1),这毫无意义。顺便说一句,字符串拆分函数非常出色。