在Racket中取反函数

Dan*_*iel 3 lambda scheme functional-programming racket

我正在尝试编写一个更高阶的Racket函数,该函数接受一个变量的一阶函数并返回其反函数.我知道它必须从这样的事情开始:

(let [(inverse (lambda (f)
                 (lambda (y)
                   ... )))])

我想这是因为inverse必须返回一个函数,该函数的功能y,并返回x这样(= (f x) y).换句话说,逆的契约是这样的:

; inverse : (number? -> number?) -> (number? -> number?)
Run Code Online (Sandbox Code Playgroud)

我只是难过想弄清楚elipses在哪里?

编辑:为了回应人们说这是不可能的,我愿意接受一个反函数,当给定y返回一个可能的x.在回复关于没有反转功能的评论时,请注意我所拥有的合同f.它是一个(number? -> number?)映射,因此具有逆.

Ósc*_*pez 6

对于一般情况,给定一个任意函数,f你无法分辨它的反函数是什么.更糟的是,一个给定的功能可能没有逆可言 -例如:输入功能可以执行的MD5哈希值,它没有逆.对不起,您的问题没有答案.