Functional programming 如何找到最小长度

Functional programming 如何找到最小长度,functional-programming,scheme,racket,Functional Programming,Scheme,Racket,我有一个XY乘XY向量b(一个2d数组/矩阵)。该向量中的每个条目都有一个长度可以从1到X*Y元素的列表。我想循环遍历向量的所有元素,找出向量中具有最小长度列表的行和列(或者如果有多个返回,则其中一个或所有返回也是好的) 我从以下内容开始(代码不完整) (定义(查找最小行列b X Y) (对于*/第一行([行(*X Y)] [列(*X Y)] #:当(

我有一个XY乘XY向量b(一个2d数组/矩阵)。该向量中的每个条目都有一个长度可以从1到X*Y元素的列表。我想循环遍历向量的所有元素,找出向量中具有最小长度列表的行和列(或者如果有多个返回,则其中一个或所有返回也是好的)

我从以下内容开始(代码不完整)

(定义(查找最小行列b X Y)
(对于*/第一行([行(*X Y)]
[列(*X Y)]
#:当(<(长度(矢量参考(矢量参考b行)列))最小值时)
(反对)
我不知道如何以功能性的方式(即不使用min sofar变量上的set!)跟踪运行的最小值和相应的坐标

(define (find-minimum-row-col a)
  (for*/fold ([the-min '(0 . 0)])
             ([row (in-range (vector-length a))]
              [col (in-range (vector-length (vector-ref a 0)))])
    (if (< (length (vector-ref (vector-ref a row) col))
           (length (vector-ref (vector-ref a (car the-min)) (cdr the-min))))
        (cons row col)
        the-min)))

您应该提供程序所需数据的示例输入,您只是将问题更改为其他内容!
(define (find-minimum-row-col a)
  (for*/fold ([the-min '(0 . 0)])
             ([row (in-range (vector-length a))]
              [col (in-range (vector-length (vector-ref a 0)))])
    (if (< (length (vector-ref (vector-ref a row) col))
           (length (vector-ref (vector-ref a (car the-min)) (cdr the-min))))
        (cons row col)
        the-min)))
(find-minimum-row-col '#(#((1) (2 2) (3 3 3))
                         #((2 2) (1) (3 3 3))
                         #((2 2) () (2 2))))
=> '(2 . 1)