def nfa_eclosure(M, s):
"""
>>> M = [{'':{1,2,3}}, {'b':{1}}, {'a':{2}}]
>>> nfa_eclosure(M, 0)
set([0, 1, 2, 3])
"""
try:
states = {nfa_eclosure(M, x+1) for x in xrange(len(M[s])) if M[s].get('')}
except IndexError:
states = set([])
states.add(s)
return states
Запуск этого броска TypeError: unhashable type: 'set'
, но проблемы с этим я не вижу.Понимание концептуализации
Edit: 2014-02-03 15:25:00
Спасибо за объяснения всех. В этом есть смысл. Есть ли «питонический» способ взять код, который у меня есть, и «спланировать» содержимое набора в новый набор, а не преобразовывать все в фризонсет, а затем сгладить его?
Edit: 2014-02-04 00:41:00
Я сделал некоторые изменения, и теперь я пришел с этим:
try:
return set([s]).union(*(nfa_eclosure(M, x) for x in M[s].get('')))
except IndexError:
return set([s])
, но у меня есть новое сообщение об ошибке
TypeError: union() argument after * must be a sequence, not generator
Поиск в google не слишком точно объяснил ситуацию. Знаешь, что происходит?
Почему не замороженные наборы? – Hyperboreus
О! благодаря! отредактированный – mhlester