파일 이름 처리

파일 이름 처리

파일 이름을 처리하는 술어들을 설명해요.

출처: GNU Prolog Manual - File name processing

본문

absolute_file_name/2

Templates

absolute_file_name(+atom, atom)

Description absolute_file_name(File1, File2)는 File2가 상대 파일 이름 File1과 연관된 절대 경로명이면 성공해요. File1은 $VAR_NAME 부분 문자열을 포함할 수 있어요. 그런 부분 문자열이 만나지면 이름이 VAR_NAME인 환경 변수가 있으면 그 값으로 확장돼요(없으면 확장 안 함). File1은 ~USER_NAME/ 부분 문자열로 시작할 수도 있는데, 이는 사용자 USER_NAME의 홈 디렉토리로 확장돼요. USER_NAME이 존재하지 않으면 File1은 무효한 경로명이에요. USER_NAME이 주어지지 않으면(즉 File1이 ~/로 시작하면) ~ 문자는 HOME 환경 변수의 값으로 확장돼요. HOME 변수가 정의되지 않으면 File1은 무효한 경로명이에요. 현재 디렉토리에 대한 상대 참조(/./ 부분 문자열)와 부모 디렉토리에 대한 참조(/../ 부분 문자열)는 제거되어 더 이상 File2에 나타나지 않아요. File1은 너무 많은 연속된 /../ 부분 문자열(즉 부모 디렉토리 상대 참조)을 포함해도 무효예요. 마지막으로 File1이 user이면 File2도 user와 통일되어 이 술어를 Prolog 파일 이름에 호출할 수 있게 해줘요(DEC-10 입출력 술어에서 user는 현재 입력/출력 스트림을 나타냄).

Windows에서는 다음이 적용돼요:

  • $VAR_NAME에 대한 대체 인식 형태는 %VAR_NAME%이에요.
  • ~가 확장될 때 HOME 변수가 정의되지 않으면 ~는 HOMEDIR과 HOMEPATH를 사용해 확장돼요(HOMEPATH가 정의되지 않으면 File1은 무효한 경로명).

파일 이름을 사용하는 대부분의 술어는 원하는 파일을 얻기 위해 이 술어를 암시적으로 호출해요. 예: open/4.

Errors

  • File1이 변수 — instantiation_error
  • File1이 변수도 원자도 아님 — type_error(atom, File1)
  • File2가 변수도 원자도 아님 — type_error(atom, File2)
  • File1이 원자이지만 유효한 경로명이 아님 — domain_error(os_path, File1)

Portability: GNU Prolog 술어.

is_absolute_file_name/1, is_relative_file_name/1

Templates

is_absolute_file_name(+atom)
is_relative_file_name(+atom)

Description is_absolute_file_name(PathName)은 PathName이 절대 파일 이름이면 성공해요. 반대로 is_relative_file_name(PathName)은 PathName이 절대 파일 이름이 아니면 성공해요. PathName의 구문에 대한 정보는 absolute_file_name/2(8.26.1절)를 참조해요. 현재 구현은 PathName의 유효성을 확인하지 않아요. PathName이 /(슬래시)로 시작하면 절대로 간주돼요. Windows에서 PathName은 \(백슬래시) 또는 드라이브 지정으로 시작할 수도 있어요.

Errors

  • PathName이 변수 — instantiation_error
  • PathName이 변수도 원자도 아님 — type_error(atom, PathName)

Portability: GNU Prolog 술어.

decompose_file_name/4

Templates

decompose_file_name(+atom, ?atom, ?atom, ?atom)

Description decompose_file_name(File, Directory, Prefix, Suffix)는 경로명 File을 분해하고 Directory 부분(마지막 / 앞의 문자들), Prefix 부분(마지막 / 뒤와 마지막 . 앞의 문자들, 접미사가 없으면 끝까지), Suffix 부분(마지막 .부터 문자열 끝까지의 문자들)을 추출해요.

Errors

  • File이 변수 — instantiation_error
  • File이 변수도 원자도 아님 — type_error(atom, File)
  • Directory가 변수도 원자도 아님 — type_error(atom, Directory)
  • Prefix가 변수도 원자도 아님 — type_error(atom, Prefix)
  • Suffix가 변수도 원자도 아님 — type_error(atom, Suffix)

Portability: GNU Prolog 술어.

prolog_file_name/2

Templates

prolog_file_name(+atom, ?atom)

Description prolog_file_name(File1, File2)는 File1과 연관된 Prolog 파일 이름과 File2를 통일해요. 더 정확히 File2는 다음과 같이 계산돼요:

  • File1에 접미사가 있거나 user이면 File2는 File1과 통일.
  • 그 외에 이름이 File1 + .pl인 파일이 존재하면 File2는 그 이름과 통일.
  • 그 외에 이름이 File1 + .pro인 파일이 존재하면 File2는 그 이름과 통일.
  • 그 외에 이름이 File1 + .prolog인 파일이 존재하면 File2는 그 이름과 통일.
  • 그 외에 File2는 File1 + .pl 이름과 통일.

이 술어는 파일의 존재를 확인하기 위해 absolute_file_name/2를 사용해요(8.26.1절).

Errors

  • File1이 변수 — instantiation_error
  • File1이 변수도 원자도 아님 — type_error(atom, File1)
  • File2가 변수도 원자도 아님 — type_error(atom, File2)
  • File1이 원자이지만 유효한 경로명이 아님 — domain_error(os_path, File1)

Portability: GNU Prolog 술어.

더 알아보기