fork download
  1. ; double dabble
  2.  
  3. (use-modules (ice-9 format))
  4.  
  5. (define (double x) (+ x x))
  6.  
  7. (define (string-join sep ss)
  8. (define (f s ss)
  9. (string-append s (string sep) ss))
  10. (define (join ss)
  11. (if (null? (cdr ss)) (car ss)
  12. (f (car ss) (join (cdr ss)))))
  13. (if (null? ss) "" (join ss)))
  14.  
  15. (define (dabble-ones n)
  16. (let ((ones (modulo (quotient n (* 16 16)) 16)))
  17. (cond ((< 4 ones)
  18. (display " dabble-ones")
  19. (+ n (* 3 (* 16 16))))
  20. (else n))))
  21.  
  22. (define (dabble-tens n)
  23. (let ((tens (modulo (quotient n (* 16 16 16)) 16)))
  24. (cond ((< 4 tens)
  25. (display " dabble-tens")
  26. (+ n (* 3 (* 16 16 16))))
  27. (else n))))
  28.  
  29. (define (display-bits n)
  30. (string-join #\space (list
  31. (format "~4,'0B" (modulo (quotient n (* 16 16 16 16)) 16))
  32. (format "~4,'0B" (modulo (quotient n (* 16 16 16)) 16))
  33. (format "~4,'0B" (modulo (quotient n (* 16 16)) 16))
  34. (format "~8,'0B" (modulo n 256)))))
  35.  
  36. (define (double-dabble n)
  37. (do ((i 0 (+ i 1)))
  38. ((= i 8) (display (display-bits n)) (newline))
  39. (display (display-bits n))
  40. (set! n (dabble-ones n))
  41. (set! n (dabble-tens n))
  42. (set! n (double n))
  43. (newline)))
  44.  
  45. (double-dabble 42) (newline)
  46. (double-dabble 220) (newline)
  47. (double-dabble 243) (newline)
Success #stdin #stdout #stderr 0.05s 9012KB
stdin
Standard input is empty
stdout
0000 0000 0000 00101010
0000 0000 0000 01010100
0000 0000 0000 10101000
0000 0000 0001 01010000
0000 0000 0010 10100000
0000 0000 0101 01000000 dabble-ones
0000 0001 0000 10000000
0000 0010 0001 00000000
0000 0100 0010 00000000

0000 0000 0000 11011100
0000 0000 0001 10111000
0000 0000 0011 01110000
0000 0000 0110 11100000 dabble-ones
0000 0001 0011 11000000
0000 0010 0111 10000000 dabble-ones
0000 0101 0101 00000000 dabble-ones dabble-tens
0001 0001 0000 00000000
0010 0010 0000 00000000

0000 0000 0000 11110011
0000 0000 0001 11100110
0000 0000 0011 11001100
0000 0000 0111 10011000 dabble-ones
0000 0001 0101 00110000 dabble-ones
0000 0011 0000 01100000
0000 0110 0000 11000000 dabble-tens
0001 0010 0001 10000000
0010 0100 0011 00000000

stderr
Some deprecated features have been used.  Set the environment
variable GUILE_WARN_DEPRECATED to "detailed" and rerun the
program to get more information.  Set it to "no" to suppress
this message.