【问题标题】:Make Scheme function for 3 parameters return function for the 3d为 3d 制作 3 个参数的方案函数返回函数
【发布时间】:2016-04-10 01:41:04
【问题描述】:

我很难将这个相当简单的 Scheme 函数转换为一个返回另一个函数的函数,该函数接受一个列表并将前一个函数应用于该列表中的所有元素。

这个函数

(define (operList op i lis) 

    (if (= 0 (length lis)) '() 

    (cons (op i (car lis)) (operList op i (cdr lis))))

)

可以这样调用

(operList + 2 '(1 1 1))

并返回'(3 3 3)

但是,我怎样才能编辑这个函数,以便我可以通过以下方式调用它

((operList + 2) '(1 1 1)) 

结果相同

【问题讨论】:

  • 感谢人们花时间阅读我的问题有什么问题? o.O

标签: function return scheme


【解决方案1】:

您必须返回一个接收列表的新函数。我冒昧地修复了缩进和基本情况(这不是您应该询问列表是否为空的方式!);特别注意现在调用递归的方式:

(define (operList op i)
  (lambda (lis)
    (if (null? lis)
        '()
        (cons (op i (car lis))
              ((operList op i) (cdr lis))))))

它按预期工作:

((operList + 2) '(1 1 1))
=> '(3 3 3)

【讨论】:

  • 非常感谢!我刚开始学习 Scheme,所以我意识到我的代码可能有愚蠢的错误,感谢您的 cmets :)
【解决方案2】:

你也可以使用map:

(define operList
  (lambda (op i)
    (lambda (lst)
      (map
       (lambda (x) (op i x))
       lst))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2017-11-09
    • 2023-02-01
    相关资源
    最近更新 更多