【问题标题】:Using foldr with scheme将文件夹与方案一起使用
【发布时间】:2013-01-23 12:48:38
【问题描述】:

如果我有一个程序列表。 foldr 怎么可以用来接听电话? 喜欢(新的 abs)=>(新的(abs x)) 注意:foldr 应该返回一个过程。

我有

 (define next 
    (lambda (ls)
      (foldr (lambda (x) x) (lambda (x) x) ls)))

但这会报错……

【问题讨论】:

  • 如果您在问题中显示具有预期输出的示例输入,这将非常有用,否则不清楚您在问什么

标签: scheme


【解决方案1】:

传递给foldr的第一个过程必须有两个参数,像这样:

(define next
  (lambda (ls)
    (foldr (lambda (x a) <???>) ; It's not clear what do you want to do inside
           (lambda (x) x)       ; this is the identity function, what's it for?
           ls)))

要明确一点:

  • foldr 的第一个参数是要执行的过程,它接收两个参数:第一个是列表中的当前值,第二个是到目前为止的累积值
  • foldr 的第二个参数是初始值,你在传递身份函数很可疑,我敢打赌这是不对的
  • foldr的第三个参数是要处理的列表

【讨论】:

  • 阅读我更新的答案,这是累积值。另外,你确定这和this other question不一样吗?
  • 不,我不想递归。那么为什么参数 1 的第一个参数是当前值,第二个是累计值呢?这就是方案的工作原理吗?
  • @omega 就是这样,阅读documentation。并阅读我的answer 到上一个问题,最后有一个使用foldr 的解决方案。
【解决方案2】:

foldr 的第二个参数应该是结果的初始值,通常是一个空列表。

【讨论】:

    猜你喜欢
    • 2013-04-03
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2015-04-06
    相关资源
    最近更新 更多