Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1091443
  • 博文数量: 104
  • 博客积分: 3715
  • 博客等级: 中校
  • 技术积分: 1868
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-30 08:38
文章分类

全部博文(104)

文章存档

2013年(1)

2012年(9)

2011年(41)

2010年(3)

2009年(3)

2008年(47)

分类: Python/Ruby

2012-03-26 00:13:16

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 /))


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

上一篇:httpclient

下一篇:Even-Odd Partition

给主人留下些什么吧!~~