【发布时间】:2017-02-28 10:35:32
【问题描述】:
我在实践中构建地图功能。
我想出了以下代码:
#lang racket
(define (map procedure items)
(if (null? items)
empty
(cons (procedure (car items)) (map procedure (cdr items)))))
我试过了,效果很好:
(map add1 '(1 2 3))
>> '(2 3 4)
然后我尝试了这个,它也很好用:
(define (scale-by-3 item)
(* 3 item))
(map scale-by-3 '(1 2 3))
>> '(3 6 9)
在那之后,我决定概括一下缩放过程:
(define (scale-by-factor factor item)
(* factor item))
这个比例因子函数有效:
(scale-by-factor 3 4)
>> 12
但是当我尝试将它与地图一起使用时:
(map (scale-by-factor 2 item) '(1 2 3))
我收到以下错误:
item: unbound identifier in module in: item
我该如何解决这个问题?没有 lambda 有没有办法解决?
【问题讨论】:
-
Racket 和 Lisp 的答案会有所不同。 Lisp 程序员可能会写一个anaphoric macro。
标签: functional-programming lisp racket sicp