CRC-32: Difference between revisions

899 bytes added ,  3 years ago
added Ol
(→‎Lisp Code: Use newer style iteration.)
(added Ol)
Line 1,405:
$ ocaml unix.cma -I +zip zip.cma crc.ml
crc: 414FA339
</pre>
 
=={{header|Ol}}==
<lang scheme>
(define (crc32 str)
(vm:xor #xFFFFFFFF
(fold (lambda (crc char)
(let loop ((n 8) (crc crc) (bits char))
(if (eq? n 0)
crc
(let*((flag (vm:and (vm:xor bits crc) 1))
(crc (>> crc 1))
(crc (if (eq? flag 0) crc (vm:xor crc #xEDB88320)))
(bits (>> bits 1)))
(loop (- n 1) crc bits)))))
#xFFFFFFFF
(string->list str))))
 
(print (number->string (crc32 "The quick brown fox jumps over the lazy dog") 16))
(print (number->string (crc32 (list->string (repeat #x00 32))) 16))
(print (number->string (crc32 (list->string (repeat #xFF 32))) 16))
(print (number->string (crc32 (list->string (iota 32))) 16))
</lang>
{{Out}}
<pre>
414fa339
190a55ad
ff6cab0b
91267e8a
</pre>