球拍如何将功能定义为程序中的另一个功能
racket how to define function as another function in procedure
我正在尝试制作一个辅助函数,它将接受切换语法的输入。
辅助函数需要能够做到:
> (num sqr) ; where num=6, and sqr is the math function square.
36
最初,内置语法为:
>(sqr num) ; where num=6
36
因为我不能将'num'同时声明为一个函数和一个变量,我需要在其中嵌套另一个过程。以下是我目前所拥有的:
(define (num func)
(display func + 6))
现在,我知道 'display' 不会像其他编程语言那样轻易地做我想做的事情。我可以使用另一种方法代替 'display' 吗?我认为这是最简单的方法,但我是新手,所以我不确定哪种方法合适。 'func' 需要能够使用数学函数,例如 'sqr' 'sqrt' 'add1'...等
你的意思是这样的吗?
#lang racket
(define ((partial func) arg)
(func arg))
((partial sqr) 6)
输出为36。
如果您只想 (num sqr)
像您的代码一样工作,您可以这样做:
(define (num fun)
(fun 6))
(num sqr) ; ==> 36
(num add1) ; ==> 7
但是 num
不会是 6。
一个解决方案可能是使自己成为一种模块语言,也许称为 #!lefthanded-racket
,其中代码解析器只是反转所有列表。因此,您可以提供如下代码:
#!lefthanded-racket
(6 num define)
(num sqr) ; ==> 36
(num add1) ; ==> 7
((((((1 y -) x ack) (1 x -) ack) (y x))
(2 (1 _))
((y 2 *) (y 0))
(0 (0 _))
(y x) match*)
(y x ack) define)
(4 2 ack) ; ==> 65536
对于简单的解决方案,您只需覆盖默认值 reader 并深度反转列表,您将遇到点列表的问题。为了获得正确的结果,您需要编写一个解析器。
运行的代码不会反,只有你写的代码。 some documentation on how to create your own language. Also this practical example 也可能有帮助。
我正在尝试制作一个辅助函数,它将接受切换语法的输入。
辅助函数需要能够做到:
> (num sqr) ; where num=6, and sqr is the math function square.
36
最初,内置语法为:
>(sqr num) ; where num=6
36
因为我不能将'num'同时声明为一个函数和一个变量,我需要在其中嵌套另一个过程。以下是我目前所拥有的:
(define (num func)
(display func + 6))
现在,我知道 'display' 不会像其他编程语言那样轻易地做我想做的事情。我可以使用另一种方法代替 'display' 吗?我认为这是最简单的方法,但我是新手,所以我不确定哪种方法合适。 'func' 需要能够使用数学函数,例如 'sqr' 'sqrt' 'add1'...等
你的意思是这样的吗?
#lang racket
(define ((partial func) arg)
(func arg))
((partial sqr) 6)
输出为36。
如果您只想 (num sqr)
像您的代码一样工作,您可以这样做:
(define (num fun)
(fun 6))
(num sqr) ; ==> 36
(num add1) ; ==> 7
但是 num
不会是 6。
一个解决方案可能是使自己成为一种模块语言,也许称为 #!lefthanded-racket
,其中代码解析器只是反转所有列表。因此,您可以提供如下代码:
#!lefthanded-racket
(6 num define)
(num sqr) ; ==> 36
(num add1) ; ==> 7
((((((1 y -) x ack) (1 x -) ack) (y x))
(2 (1 _))
((y 2 *) (y 0))
(0 (0 _))
(y x) match*)
(y x ack) define)
(4 2 ack) ; ==> 65536
对于简单的解决方案,您只需覆盖默认值 reader 并深度反转列表,您将遇到点列表的问题。为了获得正确的结果,您需要编写一个解析器。
运行的代码不会反,只有你写的代码。 some documentation on how to create your own language. Also this practical example 也可能有帮助。