我正在尝试创建一个辅助函数,它将接受切换语法的输入。
辅助功能需要能够:
> (num sqr) ; where num=6, and sqr is the math function square.
36
最初,内置语法为:
>(sqr num) ; where num=6
36
因为我无法宣布“#”;作为一个函数和一个变量同时,我需要将另一个过程嵌入其中。以下是我到目前为止:
(define (num func)
(display func + 6))
现在,我知道'显示'与其他编程语言不同,我不会轻易做到我喜欢做的事情。是否有其他方法代替'显示'我可以用吗?我认为这是最简单的方法,但我是新手,所以我不确定哪种方法合适。 ' FUNC'将需要能够采用像' sqr'这样的数学函数。 ' SQRT' ' ADD1' ...等
答案 0 :(得分:0)
你的意思是这样吗?
#lang racket
(define ((partial func) arg)
(func arg))
((partial sqr) 6)
输出为36。
答案 1 :(得分:0)
如果您只想让(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
对于简单的解决方案,您只需覆盖默认阅读器并深度反转列表,您就会遇到点列表问题。为了做到这一点,你需要编写一个解析器。
运行的代码不会反向,只会写入您编写的代码。有some documentation on how to create your own language。同样this practical example也可能有所帮助。