我正在尝试使用类重写一些代码。在某个时候,我想要的是使用对象的每个实例的参数值为成员函数分配特定的定义。
来自其他语言(JavaScript,C ++,Haskell,Fortran等),我正在努力了解 Python上的一些知识。一件事是在类方法中对self的以下区别。
例如,以下代码显然不起作用:
class fdf:
def f(x):
return 666
class gdg(fdf):
def sq():
return 7*7
hg = gdg()
hf = fdf()
print(hf.f(),hg.f(),hg.sq())
Run Code Online (Sandbox Code Playgroud)
这给出了以下错误:“ sq()接受0个位置参数,但给了1个 ”。
据我了解,其原因是在执行时,该函数在我们可能定义/调用的任何其他参数/自变量之前传递了对调用对象(调用sq的实例)的引用作为第一个参数。因此解决方案很简单:将sq的代码更改为def sq(self):。确实,Python教程1 似乎建议应始终将对象方法定义self为第一个参数。这样做可以达到预期的效果666 666 49。到目前为止,一切都很好。
但是,当我尝试实现这样的类时:
class Activation:
def nonLinearBipolarStep(self,x,string=None):
if not string: return (-1 if x<0 else 1 )
else: return ('-' if x<0 else '1')
default='bipolar'
activationFunctions = {
'bipolar': nonLinearBipolarStep ,
}
def _getActivation(self,func=default):
return …Run Code Online (Sandbox Code Playgroud) 我想用不同编程语言实现布尔值和NOT运算符的lambda-calculus结构.
这些是:
TRUE = lx.ly. x
FALSE = lx.ly. y
NOT = lx. x FALSE TRUE
Run Code Online (Sandbox Code Playgroud)
在Javascript和Python中说,这很简单
var TRUE = function(x,y){ return x;}
var FALSE = function(x,y){ return y;}
var NOT = function(b){ return b(FALSE,TRUE) ; }
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何在C中做到这一点.
实现这样的事情的天真想法
lambda true(lambda x, lambda y){ return x ; }
lambda false(lambda x, lambda y){ return x ; }
lambda not(lambda (b)(lambda, lambda) ){ return b(false,true) ;}
Run Code Online (Sandbox Code Playgroud)
在C中似乎不可能,因为typedef不允许递归定义
typedef void (*lambda)(lambda,lambda) ;not valid in C
Run Code Online (Sandbox Code Playgroud)
有没有办法在C中做到这一点?有没有办法做到这一点,有意义的用作教育的例子?也就是说,如果语法开始变得麻烦,最终会失败其目的......
最后,如果C最终以任何方式受到限制,C++中的答案对我来说也会有用,尽管具有相同的"复杂性"约束
我可能期待过多的C.
编辑:根据Tom在评论中的建议,以下定义进行编译
typedef …Run Code Online (Sandbox Code Playgroud)