JavaScript中如何基于小函数动态生成自定义逻辑门的上层函数
逻辑门动态函数生成实现思路
1 基础算子统一封装
首先把所有基础逻辑门封装为统一格式的可调用对象,标注每个门的输入端口数量(元数)、执行逻辑即可:
# 基础门示例(Python实现) BASE_GATES = { "AND": {"arity": -1, "func": lambda *inputs: all(inputs)}, # 支持任意多输入 "OR": {"arity": -1, "func": lambda *inputs: any(inputs)}, "NOT": {"arity": 1, "func": lambda x: not x} }
2 自定义逻辑门结构存储
用户搭建的自定义逻辑门统一存储为有向无环计算图格式,不需要硬编码逻辑,只需要记录节点类型、连接关系即可。以XOR为例:
{ "name": "XOR", "input_num": 2, // 输入端口数量 "nodes": [ {"id": "x1", "type": "input", "index": 0}, {"id": "x2", "type": "input", "index": 1}, {"id": "or_1", "type": "op", "op": "OR", "inputs": ["x1", "x2"]}, {"id": "and_1", "type": "op", "op": "AND", "inputs": ["x1", "x2"]}, {"id": "not_1", "type": "op", "op": "NOT", "inputs": ["and_1"]}, {"id": "output", "type": "op", "op": "AND", "inputs": ["or_1", "not_1"]} ] }
对应XOR门结构示意图:
3 动态函数生成
可以根据需求二选一实现:
- 解释执行模式(实现简单)
写通用执行器,调用自定义函数时按照拓扑顺序遍历计算图,依次计算每个节点的输出,最终返回结果。这种方式不需要动态生成代码,调试成本低,适合小批量调用场景。 - 编译执行模式(性能更高)
根据计算图结构动态生成代码字符串,用语言内置的动态执行能力生成原生可调用函数。比如XOR可生成代码:
# 动态生成的XOR函数代码 def XOR(x1, x2): return BASE_GATES["AND"]["func"]( BASE_GATES["OR"]["func"](x1, x2), BASE_GATES["NOT"]["func"](BASE_GATES["AND"]["func"](x1, x2)) )
生成后直接注册到全局算子库,调用性能和硬编码函数完全一致,适合高频调用场景。
4 自定义函数复用
把生成的自定义函数存入全局算子库,后续搭建更复杂的逻辑门时,可以直接把XOR这类自定义门当成基础算子使用,支持无限层级嵌套。
内容的提问来源于stack exchange,提问作者bib
相关产品推荐
相关产品推荐

