【问题标题】:Scheme functions and lists, multiply,add计划函数和列表,乘法,加法
【发布时间】:2014-09-08 17:08:56
【问题描述】:

我正在尝试在方案中编写 2 个函数,第一个函数将列表中的每个值乘以用户指定的值,第二个函数将一个数字添加到列表中先前结果的所有值。 我尝试了类似的方法,但球拍抛出错误。

(define test (list 1 1 2 3 5))
(define funca(*(test)(2)))

【问题讨论】:

  • Excessive parens.. 任何 Scheme 实现都会尝试调用 test2,就好像它是过程一样。
  • 正如@Sylwester 所说,小心括号!在Scheme 中,当你用() 包围某个东西时,它会被解释为一个函数应用程序。这些将引发错误:(test)(2) - 因为test2 不是函数...
  • 请在帖子中添加您遇到的错误。此外,这几乎与stackoverflow.com/questions/15649352/schemefunction-assistance/… 完全相同

标签: scheme


【解决方案1】:

在Scheme中,我们使用map高阶过程对元素列表应用函数 - 请记住,您不能列表,而我们可以 做的是乘以 它的每个元素。例如,要将每个元素乘以 2,请执行以下操作:

(define test (list 1 1 2 3 5))

(map (lambda (element) (* 2 element))
     test)
=> '(2 2 4 6 10)

请注意我们如何将lambda 作为参数传递给map:这是一个将应用于输入列表中的每个元素的函数,并返回一个带有结果的新列表。类似地,如果我们需要,比如说,将一个添加到列表中的元素:

(map (lambda (element) (+ 1 element))
     test)

=> '(2 2 3 4 6)

上面的例子被硬编码为乘以二和加一。为了解决您的问题,您只需将上述每个 sn-ps 放入一个函数中,并在正确的位置传递正确的参数(留给读者作为练习)。

【讨论】:

    猜你喜欢
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    相关资源
    最近更新 更多