RosettaCodeData/Task/Odd-word-problem/Ol/odd-word-problem.ol

32 lines
1.2 KiB
Text
Raw Permalink Normal View History

2019-09-12 10:33:56 -07:00
(define (odd_word_problem words)
(letrec ((odd (lambda (s out)
(let loop ((s s) (l '()))
(cond
((null? s)
out)
((pair? s)
(if (<= #\a (car s) #\z)
(loop (cdr s) (cons (car s) l))
(even (cdr s) (cons (cons (reverse l) (car s)) out))))
(else
(loop (s) l))))))
(even (lambda (s out)
(let loop ((s s) (l '()))
(cond
((null? s)
out)
((pair? s)
(if (<= #\a (car s) #\z)
(loop (cdr s) (cons (car s) l))
(odd (cdr s) (cons (cons l (car s)) out))))
(else
(loop (s) l)))))))
(for-each (lambda (p)
(display (runes->string (car p)))
(display (string (cdr p))))
(reverse
(odd (str-iter words) '()))))
(print))
(odd_word_problem "what,is,the;meaning,of:life.")
(odd_word_problem "we,are;not,in,kansas;any,more.")