anchor.diff:           (funcall func ptr x))))
     arr)
   
  -(defun+ %across-c-ptr-2d (func arr)
  +(defn %across-c-ptr-2d ((func function) (arr c-array))
  +    c-array
     (declare (type function func) (type c-array arr)
              (optimize (speed 3) (safety 0) (debug 1)))
     (let ((dim (c-array-dimensions arr)))
  
positive.code: (in-package :cepl.c-arrays)
  
  (defun+ map-c (function c-array &optional destination-element-type)
    (let ((r (make-c-array nil :dimensions (c-array-dimensions c-array)
                           :element-type (or destination-element-type
                                             (c-array-element-type c-array)))))
      (map-c-into r function c-array)))
  
  (defun+ map-c-into (destination-c-array function source-c-array)
    (let ((func function)
          (src source-c-array)
          (dst destination-c-array))
      (case= (c-array-rank src)
        (1 (%map-c-into-1d dst func src))
        (2 (%map-c-into-2d dst func src))
        (3 (%map-c-into-3d dst func src))
        (4 (%map-c-into-4d dst func src)))))
  
  (defun+ %map-c-into-1d (dst func src)
    (let ((dim (c-array-dimensions src)))
      (if dst
          (loop :for i :below (first dim) :do
  
negative.code:              (funcall func arr x y z)))))
    arr)
  
  (defn %across-c-4d ((func function) (arr c-array))
      c-array
    (declare (optimize (speed 3) (safety 1) (debug 1)))
    (let ((dim (c-array-dimensions arr)))
      (loop :for w :below (the c-array-index (fourth dim)) :do
         (loop :for z :below (the c-array-index (third dim)) :do
  