なんか大学のプログラミングの授業の最中なんですけど
「入力された各行の先頭の単語を抜き出す」のScheme版を書いてみた。each-line-head-word procedureがそれ。stringを渡すとstringのlistが戻ってくる。Schemeだと多値が返せるらしいんだが、まだVery little schemerな自分にはよくわからない。
(define (split-string spliter string) (let ((ls (string->list string))) (let loop((ret '()) (curret '()) (ls ls)) (if (null? ls) (reverse (cons (list->string (reverse curret)) ret)) (let ((curchar (car ls)) (rest (cdr ls))) (if (if (char? spliter) (eq? spliter curchar) (spliter curchar)) (if (null? curret) (loop ret '() rest) (loop (cons (list->string (reverse curret)) ret) '() rest)) (loop ret (cons curchar curret) rest))))))) (define (head ls) (if (pair? ls) (car ls) #f)) (define (each-line-head-word str) (map head (map (lambda (string) (split-string (lambda (x) (char-whitespace? x)) string)) (split-string #?newline str))))