Scheme/LISP의 기호에 대한 산술 계산을 어떻게 수행합니까?
-
13-09-2019 - |
문제
기호로 계산을 수행해야합니다. 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)))
해결책
String-Split에 대한 정의를 찾을 수 있습니다 여기. 그것은 당신이 선택한 구분자로 문자열을 분할 할 수있게합니다. 그런 다음 다음과 같이 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)))
다른 팁
계산을 위해 수치 값으로 변환해야합니다. (Hour (String-> 숫자 (String (첫 번째 시간))) 1 분 동안 동일합니다.
제휴하지 않습니다 StackOverflow