【发布时间】:2011-02-09 03:56:36
【问题描述】:
这是对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 的评估
【问题讨论】:
-
所以您有 2 个问题 (1) 如何创建一个函数,该函数采用向量参数并使用 Part[] 对其进行操作,并避免在 Part 尝试解构未定义符号时出现错误,以及 (2 ) 如何记住函数的评估,以便不需要重新计算。还是我误会了?
-
我之前建议的代码构建了一个函数
f,如果a->b是传递给g的图形索引中的一条边,则f[a,b]给出True。我想我在那些早期的 cmets 中误解了你的问题。 -
实际上,不,它没有,它构建了一个函数
f[x],如果x[[a]]==x[[b]]为图中的任何边a->b给出True。今天早上还没有咖啡! -
马克:我只需要(1)。 Michael:实际上它检查 x[a]==x[b] 而不是 x[[a]]==x[[b]],这就是问题