使用映射将函数应用于列表列表的困难
Difficulties with applying a function to a list of lists using mapping
我正在尝试使用我自己的映射函数将函数 f 映射到列表 L 的列表。问题是程序没有 运行。我想我犯了某种语法错误。然而,这可能与 cond
的误用或什至是对映射列表列表的想法的误解有关。
我在函数式编程和 Scehme 语言方面没有经验,这就是我无法自行解决的原因。我已尝试 different ways of conditioning 并在 Whosebug 中搜索类似问题,但我可以找到任何解决方案。
这是我的代码。我添加了一些评论来向您展示我对这个功能的看法。
(define (mapp f L)
(cond
[(null? L) '()] ; if L is empty
[(list? (car L)) ; if the head of L is a list
(cons
(mapp f (car L)) ; do mapp for the head of L which is a list
(mapp f (cdr L)) ; do mapp for the tail of L
)]
[else (cons
(f (car L)) ; do f for the head which is a number
(mapp f (cdr L)) ; do mapp for the tail of L
)]
)
)
(define (fun a)
(expt a 2)) ; I chose expt function just to see if something changes
(display
(mapp fun (1 2 3 (4 3 2) 6 (0 2) 9) )
;I expect the output to be (1 4 9 (16 9 4) 36 (0 4) 81)
程序没问题,正如评论中提到的,样本输入有问题。试试这个:
(mapp fun '(1 2 3 (4 3 2) 6 (0 2) 9))
=> '(1 4 9 (16 9 4) 36 (0 4) 81)
您忘记了列表开头的 '
(一个 quote)!此外,我们可以做一个小的(但依赖于实现)优化:在你的代码中用 pair?
替换 list?
,在一些解释器中 pair?
比 list?
更有效。
我正在尝试使用我自己的映射函数将函数 f 映射到列表 L 的列表。问题是程序没有 运行。我想我犯了某种语法错误。然而,这可能与 cond
的误用或什至是对映射列表列表的想法的误解有关。
我在函数式编程和 Scehme 语言方面没有经验,这就是我无法自行解决的原因。我已尝试 different ways of conditioning 并在 Whosebug 中搜索类似问题,但我可以找到任何解决方案。
这是我的代码。我添加了一些评论来向您展示我对这个功能的看法。
(define (mapp f L)
(cond
[(null? L) '()] ; if L is empty
[(list? (car L)) ; if the head of L is a list
(cons
(mapp f (car L)) ; do mapp for the head of L which is a list
(mapp f (cdr L)) ; do mapp for the tail of L
)]
[else (cons
(f (car L)) ; do f for the head which is a number
(mapp f (cdr L)) ; do mapp for the tail of L
)]
)
)
(define (fun a)
(expt a 2)) ; I chose expt function just to see if something changes
(display
(mapp fun (1 2 3 (4 3 2) 6 (0 2) 9) )
;I expect the output to be (1 4 9 (16 9 4) 36 (0 4) 81)
程序没问题,正如评论中提到的,样本输入有问题。试试这个:
(mapp fun '(1 2 3 (4 3 2) 6 (0 2) 9))
=> '(1 4 9 (16 9 4) 36 (0 4) 81)
您忘记了列表开头的 '
(一个 quote)!此外,我们可以做一个小的(但依赖于实现)优化:在你的代码中用 pair?
替换 list?
,在一些解释器中 pair?
比 list?
更有效。