Scheme - 没有名字的函数调用
Scheme - Function call without name
我正在使用 DrRacket 在方案中实现我的代码。我是这门语言的新手,我的作业需要一些帮助。我的老师要我从控制台调用一个函数,但她不希望我用它的名字来调用它。
This is not allowed => (function-name 'John (X p c f F g K : : 1 4))
我必须使用名称调用我的函数,而不是使用该表示法。
This is what she wants => ('John (X p c f F g K : : 1 4))
有什么方法可以定义一个没有名字的函数并调用它吗?我在互联网上搜索了很多,但找不到解决方案。
你的例子没有多大意义。第二个片段只是一个参数列表,在某个点你必须通过一个真正的过程。 "call a function without name" 的一种替代方法是使用 lambda
表达式,这是一个匿名过程...例如,this:
(define (square x)
(* x x))
(square 4)
=> 16
相当于:
((lambda (x) (* x x)) 4) ; look ma, no name!
=> 16
您甚至可以根据 lambda
定义递归过程,阅读有关 Y 组合器的更多详细信息。
编辑
阅读评论后 - 如果您只需要将参数列表传递给函数,请使用:
(apply function-name list-of-parameters)
我正在使用 DrRacket 在方案中实现我的代码。我是这门语言的新手,我的作业需要一些帮助。我的老师要我从控制台调用一个函数,但她不希望我用它的名字来调用它。
This is not allowed => (function-name 'John (X p c f F g K : : 1 4))
我必须使用名称调用我的函数,而不是使用该表示法。
This is what she wants => ('John (X p c f F g K : : 1 4))
有什么方法可以定义一个没有名字的函数并调用它吗?我在互联网上搜索了很多,但找不到解决方案。
你的例子没有多大意义。第二个片段只是一个参数列表,在某个点你必须通过一个真正的过程。 "call a function without name" 的一种替代方法是使用 lambda
表达式,这是一个匿名过程...例如,this:
(define (square x)
(* x x))
(square 4)
=> 16
相当于:
((lambda (x) (* x x)) 4) ; look ma, no name!
=> 16
您甚至可以根据 lambda
定义递归过程,阅读有关 Y 组合器的更多详细信息。
编辑
阅读评论后 - 如果您只需要将参数列表传递给函数,请使用:
(apply function-name list-of-parameters)