다음은 첫 번째 사진입니다. 못생긴 것이 아니라, 아름답 지 않고, 내가 원하는 것보다 더 오래갑니다. 또 하루 조정. 나는 기꺼이 해결책을 누군가의 더 나은 창조물에 전할 것입니다.
((define (string->number S)
(define (split L c)
(let f ((left '()) (right L))
(cond ((or (not (list? L)) (empty? right)) (values L #f))
((eq? c (car right)) (values (reverse left) (cdr right)))
(else (f (cons (car right) left) (cdr right))))))
(define (mkint L)
(let f ((sum 0) (L (map (lambda (c) (- (char->integer c) (char->integer #\0))) L)))
(if (empty? L) sum (f (+ (car L) (* 10 sum)) (cdr L)))))
(define list->num
(case-lambda
((L) (cond ((empty? L) 0)
((eq? (car L) #\+) (list->num 1 (cdr L)))
((eq? (car L) #\-) (list->num -1 (cdr L)))
(else (list->num 1 L))))
((S L) (let*-values (((num E) (split L #\E)) ((W F) (split num #\.)))
(cond (E (* (list->num S num) (expt 10 (list->num E))))
(F (* S (+ (mkint W) (/ (mkint F) (expt 10 (length F))))))
(else (* S (mkint W))))))))
(list->num (string->list S)))
문제는 다소 잘못 정의되어 있습니다. 법적 입력에 대한 문법을 지정할 수 있습니까? –
물론입니다. 나는 그것을 암시하기로했다. 선택적 선행 부호가 있습니다. 선택적 숫자가 있으며, 선택적 소수점이 있으며 선택적 추가 숫자가 있습니다. 최소한 하나의 숫자가 있어야합니다. 실제로 문법을 정의하여 여행의 재미있는 부분을 제거하지 않는 것을 선호합니다. 이 방법이 효과가 있습니까? 선택적인 'E'와 지수의 하나 이상의 숫자 추가를위한 추가 크레딧. 임의의 기본 허용을위한 추가 크레딧. 죄송합니다. 클래스가 아니며 스택 오버플로에 추가 크레딧이 없습니다. –
"이것은 유효하지 않습니다. 나는 그것을 원래 잘못 포함했다. –