TypeError <lambda> 缺少 1 个必需的位置参数

TypeError <lambda> missing 1 required positonal argument

为了上学,我必须完成一些练习。我不断收到此错误:

TypeError <lambda> () missing 1 required positional argument: 'f2'

而且我不知道我做错了什么。这段代码应该做很多事情,即:

  1. 函数OR将两个函数作为输入,returns一个lambda,给定一个输入,将两个函数应用于该输入并计算'or'结果。
  2. 函数OR将两个函数作为输入,returns一个lambda,给定一个输入,将两个函数应用于该输入并计算'or'结果。
  3. 函数 OR 将两个函数作为输入,returns 一个 lambda 给定一个输入,将两个函数应用于此类输入并连接结果。
  4. f1 是一个 lambda 检查输入是否为奇数。
  5. f2 是一个 lambda 检查输入是否为正数。
  6. surround 是给定一个数字的 lambda,returns 由方括号括起来的那个数字组成的字符串。
  7. toStar 是一个 lambda 给定任何输入 returns 字符串 '*'.

这是我的代码:

def OR(f2, f1):
   return lambda f1, f2 : True if (f1 or f2) else False

def AND(f1, f2):
   return lambda  f1, f2 : True if f1 and f2 else False

def CONCAT(f, g):
  return lambda f, g : f + g

f1 = lambda f1: False if f1 % 2 == 0 else True
f2 = lambda f2: True if f2 > 0 else False
surround = lambda c : '[' + str(c) + ']'
toStar = lambda c : str(c) + '*'

a = 7
b = 9
c = 5
res1 = OR(f1, f2)(a)
res1b = AND(f1, f2)(a)
res2 = OR(f1, f2)(b)
res2b = AND(f1, f2)(b)
res3 = CONCAT(surround, toStar)(c)
res4 = CONCAT(toStar, surround)(c)
print()

有人知道我做错了什么吗?

ORAND 应该 return 一个 一个 参数的函数,它在该参数上调用它的两个包装函数:

def OR(f1, f2):
    return lambda x: True if f1(x) or f2(x) else False

可以简化,如果f1f2保证是谓词,就

def OR(f1, f2):
    return lambda x: f1(x) or f2(x)

CONCAT,类似,需要调用其包装函数:

def CONCAT(f1, f2):
    return lambda x: f1(x) + f2(x)

CONCAT 的调用者负责确保 f1f2 的 return 值实际上是 [=21= 的有效操作数].)