2016-11-20 1 views
0

나는 프롤로그에서 단일 요소의 목록에 예를 2 배 * y를 + 5Z 를 들어, 티카 식을 변환하기 위해 노력하고있어,하지만 조건Prolog 수학 표현식을 목록으로 변환 하시겠습니까?

atom_codes(2x*y+5z, Codes) 

그래서

ERROR: atom_codes/2: Type error: `atom' expected, found `2x*y+5z' (a compound) 

을 제공합니다 표현식을 목록으로 읽으려면 어떻게해야합니까?

+1

'2x * y + 5z'는 Prolog에서 * atom *가 아닙니다. 작은 따옴표로 묶으면 원자가됩니다 :''2x * y + 5z ''. – lurker

답변

0

다른 주석에서 언급했듯이 2x*y+5z은 원자가 아닙니다. 2x은 유효한 용어가 아니므로 유효한 Prolog 용어도 아닙니다. 2*x*y+5*z으로 작성한 경우 표현식의 구문 트리를 나타내는 Prolog 용어가됩니다.

그래서 질문은 2x*y+5z의 출처와 함께하고 싶은 점입니다. 여러분은 그것이 Mathematica에서 온 것이라고 제안합니다; Mathematica 출력을 파싱하려고합니까? 그렇다면, 당신은 코드의 목록에 읽을 수 및/또는보고 좋네요 문자의 목록에 원자에 그 변환 : 당신은에서 구문 트리를 복구하려면

?- read_line_to_codes(user_input, Codes), atom_codes(Atom, Codes), atom_chars(Atom, Chars). 
|: 2x*y+5z 
Codes = [50, 120, 42, 121, 43, 53, 122], 
Atom = '2x*y+5z', 
Chars = ['2', x, *, y, +, '5', z]. 

이 경우 파서를 작성해야합니다. 이를 위해 명확한 문법 (DCGs)을 살펴보십시오.

관련 문제