Парсинг с DCGs в схеме (без пролога)?

В Python существует различие между [1 111], связал , и развязал методы.

В основном, вызов к функции членства (как method_one), связанная функция

a_test.method_one()

переводится в [1 115]

Test.method_one(a_test)

т.е. вызов к несвязанному методу. Из-за этого вызов к Вашей версии method_two перестанет работать с TypeError

>>> a_test = Test() 
>>> a_test.method_two()
Traceback (most recent call last):
  File "", line 1, in 
TypeError: method_two() takes no arguments (1 given) 

, можно изменить поведение метода с помощью декоратора

class Test(object):
    def method_one(self):
        print "Called method_one"

    @staticmethod
    def method_two():
        print "Called method two"

, декоратор говорит встроенный метакласс type по умолчанию (класс класса, cf. этот вопрос ) для не создания связанных методов для method_two.

Теперь, можно вызвать статический метод оба на экземпляр или на класс непосредственно:

>>> a_test = Test()
>>> a_test.method_one()
Called method_one
>>> a_test.method_two()
Called method_two
>>> Test.method_two()
Called method_two

6
задан false 29 November 2011 в 19:19
поделиться

1 ответ

DCG используют как унификацию, так и отслеживание с возвратом, поэтому не избежать реализации ядра Prolog. То есть, вы можете представить любую программу на чистом Prolog как DCG, анализирующую пустой список.

Вы можете сделать это, если вас интересует только какой-то особый случай DCG, например, без переменных (подходит только для распознавания, но не для анализа).

5
ответ дан 17 December 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: