16進数から10進数への変換

30分プログラム、その592。16進数から10進数への変換 via Haskellで遊ぶよ - haskell

16進数を10進数に変換してください。
ただし、入出力は文字列とし、次の変換は最低必ずできなければいけないこととします。

1. 0x12437308CCB6 →20080902065334
2. 0x2C9C1227FC6520B →200904012311450123

あわせて、扱える最大の整数も明らかにしてください。

使い方

gosh> (hex->int "0xF")
291
gosh> (hex->int "0x11")
17
gosh> (hex->int  "0x12437308CCB6")
20080902065334

ソースコード

#! /opt/local/bin/gosh
;; -*- mode:scheme; coding:utf-8 -*-
;;
;; hex2int.scm -
;;
;; Copyright(C) 2009 by mzp
;; Author: MIZUNO Hiroki / mzpppp at gmail dot com
;; http://howdyworld.org

(use gauche.collection)

(define (hex->int s)
  (fold (lambda (x y) (+ x (* 16 y)))
	0
	(cddr (map (cut digit->integer <> 16)
		   s))))