1
pyDatalog.load() 메서드를 사용하여 작은 pyDatalog 프로그램을로드하려고합니다. 내가 잘못파일의 데이터 로그 프로그램을 pyDatalog에로드
"""
+ (factorial[1]==1)
(factorial[N] == F) <= (N > 1) & (F == N*factorial[N-1])
"""
을 뭐하는 거지 예를 들어, 나는 https://sites.google.com/site/pydatalog/
from pyDatalog import pyDatalog
pyDatalog.create_atoms('factorial, N, F') # gives datalog capability to these words
def run_program():
N = pyDatalog.Variable()
F = pyDatalog.Variable()
file_in = open("sample_datalog_program.dl", 'r')
mc = file_in.read()
print mc
@pyDatalog.program()
def _(): # the function name is ignored
pyDatalog.load(mc)
#pyDatalog.load("""
#+ (factorial[1]==1)
#(factorial[N] == F) <= (N > 1) & (F == N*factorial[N-1])
#""")
print(pyDatalog.ask('factorial[4]==F'))
file_in.close()
pass
if __name__ == "__main__":
run_program()
에서 계승 샘플 파일 sample_datalog_program.dl는 다음과 같은 포함로드는 무엇입니까? pyDatalog.load (mc) 행을 다음 4 개의 주석 처리 된 행으로 바꾸면 제대로 작동합니다.
내가 오류는 다음과 같습니다
/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/bin/python2.7 run_datalog_program.py
pyDatalog version 0.12.0
Traceback (most recent call last):
File "run_datalog_program.py", line 25, in <module>
run_program()
File "run_datalog_program.py", line 11, in run_program
@pyDatalog.program()
File "/usr/local/lib/python2.7/site-packages/pyDatalog/pyParser.py", line 191, in add_program
load(source_code, newglobals, defined, function=func_name)
File "/usr/local/lib/python2.7/site-packages/pyDatalog/pyParser.py", line 154, in load
six.exec_(code, newglobals)
File "/usr/local/lib/python2.7/site-packages/six.py", line 308, in exec_
exec("""exec code in globs, locs""")
File "<string>", line 1, in <module>
File "_", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/pyDatalog/pyDatalog.py", line 115, in load
return pyParser.load(code)
File "/usr/local/lib/python2.7/site-packages/pyDatalog/pyParser.py", line 133, in load
spaces = r.match(line).group()
TypeError: expected string or buffer
"""
+ (factorial[1]==1)
(factorial[N] == F) <= (N > 1) & (F == N*factorial[N-1])
"""
Process finished with exit code 1
감사합니다!
감사합니다. 그러나 불행하게도하지 않습니다 매우 work.from pyDatalog 수입 pyDatalog 데프 run_program() : pyDatalog.assert_fact ('부모', '빌', '존 아담스 (John Adams)') file_in = 개방 ("ancestor_datalog_program.dl ','R ' (X, Y) <= 부모 (X, Y) <0123> Y) # "" " MC = file_in.read() 인쇄 MC pyDatalog.load (MC) file_in.close() 인쇄 (pyDatalog.ask ('부모 (법안, X)')) if __name__ == "__mai n__ ": run_program() – Andres
ancestor_datalog_program.dl에서 코드 주위에 트리플 따옴표가 필요하지 않습니다. – user474491
위 코드를 테스트했습니다. ask() 호출에서 "=="이 필요했습니다 ("="). – user474491