どのようにしてスキーム/ Lispでシンボルの算術計算を実行しますか?
-
13-09-2019 - |
質問
私は記号で計算を実行する必要があります。私は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)))
解決
現在のページの文字列分割の定義を見つけることができます。それはあなたの選択の区切り文字で文字列を分割することができます。次に、このように取得分を定義することができます:
(define (get-minutes time)
(let* ((fields (string-split (symbol->string time) '(#\:)))
(hour (string->number (first fields)))
(minutes (string->number (second fields))))
(+ (* hour 60) minutes)))
他のヒント
あなたは意味を作るためにあなたの計算の数値に変換する必要があります。 (時間(はstring->番号(文字列(一回目))))と同じ分
所属していません StackOverflow