这是从讨论中分离出来的earlier问题。
假设我需要定义一个函数 f 来检查给定的图形标签是否是正确的着色。换句话说,我们为每个节点分配了一个整数,并且没有两个相邻节点得到相同的答案。例如,对于 {"Path",3},f[{1,2,3}] 返回 True,f[{1,1,2}] 返回 False。我将如何为任意图创建这样的函数?
以下内容基本上满足了我的需要,但会生成部分警告。
g[edges_] := Function @@ {{x}, And @@ (x[[First[#]]] != x[[Last[#]]] & /@ edges)}
f = g[GraphData[{"Path", 3}, "EdgeIndices"]];
f[{1, 2, 1}]==False
这是我经常遇到的一个玩具实例问题——我需要以编程方式创建一个多元函数 f,并最终得到以下任一结果:1) 部分警告 2) 推迟对 g 的求值,直到对 f 求值
这是一些东西。当其他事情都不起作用的时候,Hold
和规则通常可以完成工作。我不确定它会产生正确的结果。您的图形着色问题,但希望能为您提供一个起点。我最终使用了Slot
而不是命名变量,因为存在一些范围问题(也存在于我之前的建议中,x$
vs. x
)当我使用一个命名变量时,我没有花时间尝试解决这个问题。
g[edges_] :=
With[{ors = (Hold @@ edges) /. {a_, b_} :> #[[a]] == #[[b]]},
Function[!ors] /. Hold -> Or
]
In[90]:= f = g[GraphData[{"Path", 3}, "EdgeIndices"]]
Out[90]= !(#1[[1]] == #1[[2]] || #1[[2]] == #1[[3]]) &
In[91]:= f[{1, 2, 3}]
Out[91]= True
In[92]:= f[{1, 1, 2}]
Out[92]= False
我觉得它缺乏典型的 Mathematica 优雅,但它确实有效。如果我受到更美丽的东西的启发,我会更新。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)