dbr*_*dbr 21 python user-interface directed-graph
我想实现一个节点接口,基本上是一个DAG,每个节点在它的输入连接上执行操作,并输出一些东西(你可以连接到另一个节点)
一些示例应用:
作为第一个目标,我想拥有一个只有2个节点的图形应用程序.一个简单输出一个固定数字的"数字"和一个"加"节点,它取两个输入并输出两者之和.
正如人们已经回答的那样,我对如何在代码中表示数据有一个粗略的想法,例如在Python中寻找伪代码:
class Number:
def __init__(self, value):
self.value = value
def eval(self):
return self.value
class Add:
def __init__(self, input1, input2):
self.input1 = input1
self.input2 = input2
def eval(self):
return self.input1.eval() + self.input2.eval()
a = Number(20)
b = Number(72)
adder = Add(a, b)
print adder.eval()
Run Code Online (Sandbox Code Playgroud)
我如何围绕此包装自定义GUI?像下面的东西,但略少手绘!

我从哪里开始?我目前打算用Objective-C/Cocoa编写它,尽管我对其他语言的建议不仅仅是开放的.
我将从建模一些基本界面开始(在 OOP 意义上,而不是 GUI 意义上)。在我看来,您将有一个节点,它将接受输入集合和单个输出。您没有说明数据类型的范围,但您需要一些合适的方法来表示输入/输出。对于您的第一个目标,这可以是一个整数。
在一些通用的 C 风格的 OOP 语言中(希望它有意义):
class Node<T> {
Node<T>[] inputs;
T eval();
}
class AdderNode extends Node<int> {
int eval() {
int accum = 0;
for (inputs : i)
accum += i.eval();
return i;
}
}
class ConstNode<int I> extends Node<int> {
int eval() { return I; }
}
AdderNode a;
a.inputs.add(ConstNode<2>());
a.inputs.add(ConstNode<3>());
a.eval();
Run Code Online (Sandbox Code Playgroud)
您可以通过用一些抽象类、泛型或接口替换 int 来对此进行扩展。当然,实际实施会根据实际语言而有所不同。