Chinaunix首页 | 论坛 | 认证专区 | 博客 登录 | 注册

freearth\'s blog: 系统技术与分布式计算freearth.blog.chinaunix.net

如果你是个木匠,正在打造一个漂亮的五斗柜,你是不会在柜子后面用三合板的,哪怕那一面对着墙,永远没人看到它。你知道它在那里,所以即使是柜子后面,你也会用上好的木材。为了能在晚上睡个好觉,你会在审美和质量上自始至终争取做到最好。

  • 博客访问: 720564
  • 博文数量: 129
  • 博客积分: 3715
  • 博客等级: 中校
  • 技术积分: 1867
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-30 08:38
文章分类

全部博文(129)

文章存档

2013年(1)

2012年(9)

2011年(43)

2010年(3)

2009年(4)

2008年(51)

2007年(18)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题
Base-26数字算术 2012-03-26 00:13:16

分类: Python/Ruby

planet scheme上23号的Programming Praxis: 26进制的算术计算。大意是:a表示0,b表示1,...,z表示25,构成一个26进制的数字。在这个体系下进行乘法运算。我的实现如下:

点击(此处)折叠或打开

  1. (define-module (base-26))

  2. ;; convert between a single char and a number
  3. ;; a -> 0, b -> 1, ..., z -> 25
  4. (define (char->number char)
  5.   (- (char->integer char)
  6.      (char->integer #\a)))

  7. (define (number->char num)
  8.   (integer->char (+ num
  9.                     (char->integer #\a))))

  10. ;; convert between char-number and a normal number
  11. (export cnumber->number)
  12. (define (cnumber->number cnumber)
  13.   (define len (string-length cnumber))
  14.   (define minus (and (> len 0)
  15.                      (eqv? (string-ref cnumber 0) #\-)))
  16.   (let loop ((result 0) (i (if minus 1 0)))
  17.     (if (= i len)
  18.       (if minus (- result) result)
  19.       (loop (+ (* result 26)
  20.                (char->number (string-ref cnumber i)))
  21.             (+ i 1)))))

  22. (export number->cnumber)
  23. (define (number->cnumber num)
  24.   (define minus (< num 0))
  25.   (let loop ((result '()) (num (abs num)))
  26.     (if (zero? num)
  27.       (let ((full-result (map number->char
  28.                               (if (null? result)
  29.                                 '(0)
  30.                                 result))))
  31.         (list->string (if minus
  32.                         (cons #\- full-result)
  33.                         full-result)))
  34.       (loop (cons (remainder num 26) result)
  35.             (quotient num 26)))))

  36. ;; operators
  37. (define (translator operator)
  38.   (lambda args
  39.     (number->cnumber
  40.       (apply operator (map cnumber->number args)))))

  41. (export cadd)
  42. (define cadd (translator +))

  43. (export csub)
  44. (define csub (translator -))

  45. (export cmul)
  46. (define cmul (translator *))

  47. (export cdiv)
  48. (define cdiv (translator /))


阅读(3910) | 评论(0) | 转发(0) |
0

上一篇:httpclient

下一篇:Even-Odd Partition

给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册