【发布时间】:2023-04-05 17:45:01
【问题描述】:
我有以下函数来缩放(2-col)矩阵:
(define (scale-matrix matrix scale)
(map (lambda (row)
(list (* scale (car row))
(* scale (cadr row))))
matrix))
(scale-matrix '((1 2) (3 4)) 3)
; ((3 6) (9 12))
但是,我很难将其转换为内联咖喱调用。这是我目前所处的位置:
(map
(lambda (row)
(lambda (scale)
(list (* scale (car row))
(* scale (cadr row)))))
'((1 2) (3 4)))
; (#<procedure:...esktop/sicp/021.scm:54:3> #<procedure:...esktop/sicp/021.scm:54:3>)
在这里传递比例和矩阵的正确方法是什么?换句话说,3 放在哪里?
到目前为止,我最接近的方法是将3 硬编码在其中:
(map
(lambda (row)
((lambda (scale)
; 3 hardcoded, nil placeholder. How to actually 'call' with 3?
(list (* 3 (car row)) (* 3 (cadr row)))) nil))
'((1 2) (3 4)))
或者,我是否需要将scale 作为第一个参数传递?它似乎以这种方式工作,但不确定是否需要这样做(甚至不确定为什么会这样!)
((lambda (scale)
(map (lambda (row)
(list (* scale (car row)) (* scale (cadr row))))
'((1 2) (3 4)))) 3)
; ((3 6) (9 12))
【问题讨论】: