【问题标题】:Scheme - Function call without name方案 - 没有名称的函数调用
【发布时间】:2016-04-08 19:28:16
【问题描述】:

我正在使用 DrRacket 在方案中实现我的代码。我是这门语言的新手,我的作业需要一些帮助。我的老师要我从控制台调用一个函数,她不希望我用它的名字来调用它。

这是不允许的 => (function-name 'John (X p c f F g K : : 1 4))

我必须使用不带名称的函数调用我的函数,而不是使用该符号。

这就是她想要的 => ('John (X p c f F g K : : 1 4))

有没有办法定义一个没有名字的函数并调用它?我在互联网上搜索了很多,但找不到解决方案。

【问题讨论】:

  • 问问你的老师她真正想要什么。
  • 系统必须处理形式为('John (X p c F z C b Y h 1 2 3 4 : :))的设置密码请求

标签: function lambda scheme racket


【解决方案1】:

你的例子没有多大意义。第二个 sn-p 只是一个参数列表,在某些时候你必须传递一个真实的过程。 “调用没有名称的函数”的一种替代方法是使用 lambda 表达式,这是一个匿名过程......例如,这个:

(define (square x)
  (* x x))

(square 4)
=> 16

相当于这个:

((lambda (x) (* x x)) 4) ; look ma, no name!
=> 16

您甚至可以根据 lambdas 定义递归过程,阅读有关 Y-combinator 的更多详细信息。

编辑

阅读完 cmets - 如果您只是需要将参数列表传递给函数,请使用:

(apply function-name list-of-parameters)

【讨论】:

  • " 系统必须以 ('John (X p c F z C b Y h 1 2 3 4 : :)) 的形式处理设置密码请求,这就是她想要的。以及如何将参数列表传递给函数?
  • 请注意,您完全误解了老师的要求。如果您收到列表中的参数,您可以像这样调用函数:(apply function-name list-of-parameters)。你的老师所问的并不意味着函数的名称不能使用。
  • 是的,我知道我误解了它。参数列表会有所帮助,ty
猜你喜欢
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多