OCamlのGolfの問題をSchemeで解いてみる

30分プログラム、その648。Users Meeting - OCaml.jpのGolfコンペ用の問題(anarchy golf - Sum of Divisors for OCaml Golf Competition)が公開されました。
Golfにチャレンジするのは上記サイトでやるとして、せっかく問題があるんだから解いておきましょう。しかもSchemeで、それもGolfっぽくなく。

使い方

$ echo "3\n8\n6" | gosh divisor.scm
3: 4
8: 15
6: 12

ソースコード

#! /opt/local/bin/gosh
;; -*- mode:scheme; coding:utf-8 -*-
;;
;; divisor.scm -
;;
;; Copyright(C) 2009 by mzp
;; Author: MIZUNO Hiroki / mzpppp at gmail dot com
;; http://howdyworld.org
;;
;; Timestamp: 2009/08/27 22:29:54
;;
;; This program is free software; you can redistribute it and/or
;; modify it under MIT Lincence.
;;

(use srfi-1)
(define (divisor n)
  (filter (lambda (i) (= 0 (modulo n i))) (iota n 1)))

(define (sum-of-divisor n)
  (cons n (fold + 0 (divisor n))))

(define (main _)
  (for-each (lambda (x) (print (car x) ": " (cdr x)))
	    (map (compose sum-of-divisor string->number)
		 (port->string-list (standard-input-port)))))