2017-03-26 2 views
1

좋아요. ""을 추가하지 않고 소문자를 대문자로 바꿀 수있는 방법이 있는지 물어보고 싶습니다. 죄송합니다.이 소리가 바보 같지만 다른 프로그램을 실행해야합니다. 나는 이런 식으로 뭔가를 썼다 :대문자로 프롤로그 변환

X=false-P 

하지만 다음과 같습니다 :

change(~A,X):- 
    upcase_atom(A,D), 
    X = false-D. 

내가처럼 보이도록 출력을 필요

X=false-"P" 

난 정말 당신의 도움을 주셔서 감사합니다 것입니다!

+0

왜'A'에서'~'를 사용합니까? –

+0

이전에 정의 된 연산자와 that ~ p를 false-P로 변경해야합니다. @WillemVanOnsem – polles

+0

문제는 대문자로 시작하는 것이 functor/predicate/constant/... 변수가 아니라는 것입니다. –

답변

0

주 1하십시오 펑/술어가 하이픈 (-)를 포함 할 수 없습니다. 예를 들어 밑줄 (_)을 사용하여 문제를 "해결"할 수 있습니다.

노드 2 : 당신이 false_X를 작성하는 경우 그에 건물, 그것은 전체 원자로 false_X를 볼 것이다, 그래서 X는 선언 X에 바인딩되지 않습니다.

주 3 : 당신은 그렇지 프롤로그이에 오류가 발생하지, ~운영자를 선언해야합니다. 이 두 발언을 바탕으로

, 당신은 그러나 쉽게 대신 atom_concat/3를 사용하여 문제를 해결할 수 있습니다 :

:- op(1200, fx, [~]). 

change(~A,X):- 
    upcase_atom(A,D), 
    atom_concat(false_,D,X).

첫 번째 줄은 ~ 선언 우선 1200와 하나 개의 인자 (및 f x처럼 작성)와 연산자 . 만약 하나를 쓰면 질의는 다음을 산출합니다 :

?- change(~(foo),X). 
X = false_FOO. 

?- change(~foo,X). 
X = false_FOO. 
관련 문제