很抱歉,如果这听起来有点过于具体,但对我的问题的答案将是一个更广泛问题的答案。所以这是我的问题的背景:
在摘要数据类型中,我正在构建一个"胶水层"在两个ADT之间 - 调度程序和堆 - 称为容器。调度程序为它提供了一个比较函数,它应该传递给Heap一个函数,该函数为任何输入返回该比较函数的否定结果。 原因是Heap是最大堆,但Scheduler需要绘制最小元素。 我不被允许将堆改为最小堆或全部。可能,我不允许更改Scheduler的比较功能以返回它通常返回的负数,或者再次返回AT ALL。 Container可以反转函数并将其提供给Heap。 问题是它到底怎么办?!
我使用的类型是:
typedef void* Data;
typedef int (*DataCompareFunc)(const Data data1,const Data data2);
调度程序调用函数:
Container* ContainerCreate(DataCompareFunc compFunc)
HeapCreate的签名是:
Heap* HeapCreate(DataCompareFunc compFunc);
ContainerCreate
以什么方式将否定函数转移到HeapCreate
?
答案 0 :(得分:0)
通常使用Lambda和Closure函数创建此类功能。
Lambda& C ++ 11支持闭包,但即使在旧式C ++中,您也可以编写Functors
对于import os
from nltk.corpus import wordnet as wn
from nltk.corpus import WordNetCorpusReader
cwd = os.getcwd()
nltk.data.path.append(cwd)
wordnet16_dir="wordnet-1.6/"
wn16_path = "{0}/dict".format(wordnet16_dir)
wn16 = WordNetCorpusReader(os.path.abspath("{0}/{1}".format(cwd, wn16_path)), nltk.data.find(wn16_path))
def synset2offset(ss):
return str(ss.offset()).zfill(8) + '-' + ss.pos()
wn16_ids = [synset2offset(ss) for ss in wn16.all_synsets()]
wn30_ids = [synset2offset(ss) for ss in wn.all_synsets()]
senses30 = wn.synsets('gouvernement',lang=u'fre')
senses16 = [ss for ss in wn.synsets('gouvernement',lang=u'fre') if synset2offset(ss) in wn16_ids]
来说,它更难,但GCC有一些support
在闭包中用匿名函数编写一个否定函数是(伪代码)
C
其中function negate(f) {
return function(){ not f(); }
}
将返回一个函数,该函数会在negate(somefunction)
返回true
等时返回somefunction
。