2010-01-19 4 views
2

내 Prolog 출력 코드에 네트워크 공유 경로를 표시하려고합니다. 나는 형식을 사용하여 표시하려고하면SWI-Prolog에서 검은 셔츠를 표시하는 방법

\\fileserver\path\to\file.txt (ex1) 

     or 
\\\\fileserver\\path\\to\\file.txt (ex2) 

:하지만

경로는 같은입니다

pri(Z):- 
    format('Printing Zx : \"~w\"',[Z]). 

슬래시가 분명히

\fileserverpathtofile.txt (ex1) 

에 몇 번을 잘리지을, 경로 디스플레이가 올 바르면 \\\\을 포함 할 수 있습니다.

올바른 경로를 인쇄하는 방법은 무엇입니까?

도움주세요.

감사합니다.

+1

이상한. SWI-Prolog toplevel에서'format ('Zx : \ "~ w \"', [ '\\\\ 파일 서버 \ 경로 \\를 \\ 파일. 벌금. 처음에 백 슬래시가 제대로 읽혀지고 있습니까? 또한, 따옴표로 묶은 작은 따옴표 안에서도 큰 따옴표를 이스케이프 할 필요가 없습니다. – bcat

+0

네 개의 슬래시가 있으면 제대로 작동합니다. 하지만이 경로는 외부 소스에서 나에게오고 때로는 \\ fileserver \ path \ to \ file.txt 만 가져옵니다.이 경우 단일 슬래시가 제거됩니다. 이 한 형식을 사용하여 – JPro

+0

('Zx : \ "~ w \"', [ '\\ fileserver \ path \ to \ file.txt'] 인쇄) 문제가 발생했습니다. – JPro

답변

1

프롤로그의 원자 백 슬래시는 메타 문자입니다. 즉, 원자에 백 슬래시 문자가 포함되도록하려면 백 슬래시 문자를 사용하여 이스케이프해야합니다. 예 : 당신이 인쇄 물건을 밖으로 두 가지 방법이 원칙적으로

Path = '\\\\fileserver\\path\\to\\file.txt'. 

를 작성해야 프롤로그 원자로서 Windows 경로 \\fileserver\path\to\file.txt를 표현하기 위해, 인간 (꽤 인쇄) 하나는, 사용 write

?- Path = '\\\\fileserver\\path\\to\\file.txt', write(Path). 
\\fileserver\path\to\file.txt 
write_canonical

?- Path = '\\\\fileserver\\path\\to\\file.txt', write_canonical(Path). 
'\\\\fileserver\\path\\to\\file.txt' 

write_canonical가 쉬르하게 사용

과 (직렬화) 기계 하나, e는 Prolog가 동일한 정확한 원자로 출력을 다시 읽을 수 있음을 나타냅니다.

문제는 사용자가 Prolog에서 경로를 올바르게 나타내지 않은 것 같습니다. 경로가 외부 소스에서 오는 경우 Prolog 아톰으로 저장하기 전에 먼저 경로를 이스케이프 처리 (모든 백 슬래시 앞에 백 슬래시 추가)해야합니다.

+0

고마워요. 프롤로그에서 모든 술어를 사용하여 모든 백 슬래시 앞에 백 슬러를 추가하는 방법이 있습니까? – JPro

+0

아는 한 Prolog 아톰을 이와 같이 수정할 수있는 내장 된 술어가 없습니다 (즉,원자를 문자 목록으로 분할하고,이 목록을 통해 모든 백 슬래시에 대해 백 슬래시가 추가 된 새 목록을 만들고,이 목록을 다시 원자로 변환합니다. – Kaarel

관련 문제