HaHaHa!(old)

2006-08-19

ShowS型

数値を16進表記の文字列に変換したい - 趣味的にっきより.

ShowS のありがたみってあまり解りやすくないんですよねぇ.

http://www.sampou.org/haskell/tutorial-j/stdclasses.html#sect8.3

すこし解説があります.蓄積引数を使うことで再帰途中の(++)による効率の

低下を防いでいるということです.

ha-tan さんのコードを難読化してみました.(^^;)

module Main (main) where

import Numeric (showHex)
import System.Environment (getArgs)

pprHexS :: Integral a => a -> ShowS
pprHexS n = ("[ 0x"++) . showHex n . (" ]"++)

main :: IO ()
main = getArgs >>= putStr . flip id "\n" . foldr (.) id . map (pprHexS . read)

実行例は

% runhaskell pprHex.hs 123 1234 12345
[ 0x7b ][ 0x4d2 ][ 0x3039 ]

タナカタナカ2006/08/19 18:57正解!。返答して頂いてありがとうございます。
速答している様子が目に見えるようです。
ついでに、A(1,4,n)、A(3,4,n)の増加の様子も出しておいても良かったかな…
実は、A(1,4,n)、A(3,4,n)はn→∞では無限回大小が変わるそうです。
Littlewoodという数学者が証明したそうです。(1914年)
証明される前は、チェビシェフChebyshevが、A(1,4,n)<=A(3,4,n)と予想していたとか。
最小数が26861なのは、1957年に分かったとか。
LL-Ringの"キミならどう書く"には数学に近すぎ(て好みの分かれ)る問題カナ?
http://homepage2.nifty.com/hiranouchi/asir/pari300.html
参考文献:「数論Ⅰ」加藤 他 著 岩波書店 p.272