Skip to content

Latest commit

 

History

History
255 lines (181 loc) · 17.4 KB

stdlib.md

File metadata and controls

255 lines (181 loc) · 17.4 KB

내장 동사

내장 함수는 모두 전역 동사이고 사용자 함수처럼 부릅니다. 같은 이름의 함수를 정의하면 내장 동사를 가립니다.

("가,나"를 ","로 분리한 값)
"설정.json"을 읽어서 JSON해석한 값
자료에 3이 있으면:

표의 굵은 인자는 전달(-어서/-해서)로 넘긴 앞 절 결과를 받습니다. 굵은 인자가 없는 동사는 전달로 부를 수 없습니다(E-CALL-004).

인자 종류가 맞지 않으면 E-TYPE-001입니다. 인자가 리터럴이면 이 오류를 실행 전에 알려 줍니다.

이름 꼴 하는 일 예
~변환하다 다른 종류나 형식으로 바꿈 정수변환하다, JSON변환하다
~해석하다 형식을 해석해 값으로 만듦 JSON해석하다
~구하다 다른 값에서 새 값을 계산 합집합구하다
읽다, 쓰다 파일만 다룸

입출력과 확인

동사 인자 결과
출력하다 을 값 값을 한 줄로 출력합니다
묻다 을 질문(생략 가능) 질문을 줄바꿈 없이 출력하고 입력 한 줄을 받습니다. 입력이 끝났으면 없음
확인하다 을 논리 거짓이면 E-TEST-001 오류
이름은 ("이름이 무엇인가요? "를 물은 값)이다.
"반가워요, {이름}님"을 출력한다.

입력을 받을 수 없는 실행에서 묻다를 쓰면 E-INPUT-001입니다. 프로그램을 표준 입력으로 넘긴 ieum run -, 대화형 실행, 테스트가 그렇습니다.

실행인자는 명령줄 인자의 문자열 목록이며 바꿀 수 없습니다. ieum 계산.이음 3 4로 실행하면 ["3", "4"]입니다.

수

동사 인자 결과
반올림하다 을 수 가장 가까운 정수. 0.5는 0에서 먼 쪽으로 갑니다(사사오입)
올림하다, 내림하다 을 수 위쪽, 아래쪽 정수
뽑다 에서 컬렉션이나 문자열 무작위로 고른 원소
섞다 을 컬렉션이나 문자열 무작위 순서의 새 목록

합계, 평균, 최댓값, 최솟값과 절댓값, 제곱근, 삼각함수, 로그는 점수들의 평균, 수의 절댓값, 각의 사인처럼 속성으로 읽습니다. 전체 목록은 언어 안내의 속성 표에 있습니다. 거듭제곱은 자연상수 ** 2처럼 **로 씁니다. 원주율과 자연상수는 상수입니다.

빈 모음의 합계는 0이지만, 빈 모음의 평균, 최댓값, 최솟값과 빈 모음에서 뽑기는 E-VALUE-001입니다. 음수의 제곱근, 0 이하의 로그, -1~1 밖의 아크사인과 아크코사인도 E-VALUE-001입니다.

Rust API의 Options::seed를 정하면 뽑다와 섞다가 늘 같은 값을 고릅니다.

변환

동사 인자 결과
정수변환하다 을 값 아래 설명 참고
실수변환하다 을 값 아래 설명 참고
문자열변환하다 을 값, 로 서식(생략 가능) 출력할 때와 같은 표현. 서식은 문자열 끼워넣기의 {값:서식}과 같습니다(".2f", ",", '%Y-%m-%d', ">8")
목록변환하다, 튜플변환하다, 집합변환하다 을 값 원소를 모은 새 컬렉션. 문자열은 글자 단위, 사전은 키
JSON변환하다 을 값 JSON 문자열
CSV변환하다 을 행 목록 CSV 문자열. 줄 끝은 \r\n
JSON해석하다, CSV해석하다 을 문자열 해석한 값

정수변환하다는 문자열의 양 끝 공백을 없앤 뒤 십진 정수로 읽습니다. +나 - 부호와 앞자리 0은 받지만 1_000, 0x1f, 1.0은 E-CONVERT-001입니다. 실수는 0 쪽으로 버리고, 정수는 그대로 돌려줍니다.

실수변환하다는 문자열의 양 끝 공백을 없앤 뒤 십진 실수로 읽으며 부호, 소수점, 지수(1.5e2)를 받습니다. inf와 nan은 E-CONVERT-001, 범위를 넘는 수는 E-CONVERT-002입니다. 정수는 실수로 바꿉니다.

논리값은 수로 바꿀 수 없습니다.

JSON

JSON 객체는 사전, 배열은 목록이 되고, true, false, null은 각각 참, 거짓, 없음이 됩니다. 해석할 때 문법 오류나 중복 키가 있으면 E-JSON-001입니다.

기록할 때 튜플은 배열로, 자료형 값은 필드 이름을 키로 하는 객체로 씁니다. 순환 구조, 문자열이 아닌 사전 키, NaN과 무한대, 집합, 함수, 오류 값은 E-JSON-002입니다. 자료형 값은 이런 값을 담고 있을 때만 거부합니다.

CSV

CSV 값은 행 목록입니다. 행은 목록이나 튜플이고, 모든 행의 열 수가 같아야 합니다.

기록할 때 칸에는 문자열, 수, 논리값, 없음을 쓸 수 있습니다. 논리값은 참과 거짓으로, 없음은 ""로 기록합니다. 그 밖의 값이나 칸이 없는 행([])은 E-CSV-002입니다.

CSV해석하다는 모든 칸을 문자열로 돌려주며 빈 줄은 건너뜁니다. 닫히지 않은 따옴표나 열 수가 다른 행은 E-CSV-001이고, 메시지에 줄과 글자 위치가 나옵니다.

문자열

동사 인자 결과
분리하다 을 문자열, 로 구분자(생략 가능) 조각 목록. 구분자를 생략하면 공백 덩어리 사이의 글들입니다
줄분리하다 을 문자열 줄 목록. \n과 \r\n을 모두 인식
연결하다 을 문자열의 목록이나 튜플, 로 구분자 문자열
다듬다 을 문자열 양 끝 공백을 없앤 문자열
치환하다 에서 문자열, 을 찾을 글, 로 바꿀 글 문자열
시작하다 이/가 문자열, 로 앞글 논리
끝나다 이/가 문자열, 로 뒷글 논리
대문자변환하다, 소문자변환하다 을 문자열 영문자의 대소문자를 바꾼 문자열
세다 에서 문자열(또는 목록, 튜플), 을 값 문자열에서는 겹치지 않게 나타난 횟수, 목록에서는 같은 원소의 수
일치하다 이/가 문자열, 와 정규식 문자열 전체가 맞으면 참
추출하다 에서 문자열, 을 정규식 맞는 부분들의 목록
정규식치환하다 에서 문자열, 을 정규식, 로 바꿀 글 맞는 부분을 모두 바꾼 문자열. 바꿀 글의 $1은 첫 번째 묶음, ${이름}은 이름 붙인 묶음, $$는 $ 자체

분리하다의 구분자, 치환하다와 세다의 찾을 글이 빈 문자열이면 E-TEXT-001입니다.

정규식은 '\d+'처럼 작은따옴표로 쓰고, 문법은 Rust regex 크레이트를 따릅니다. 읽을 수 없는 정규식이나, 바꿀 글에서 정규식에 없는 묶음을 쓰면 E-REGEX-001입니다.

시각

동사 인자 결과
현재시각구하다 없음 지금의 시각
시각해석하다 을 문자열, 로 서식 서식대로 읽은 시각. 시간이 없으면 자정, 시간대 오프셋(%z)이 있으면 그 순간의 지역 시각
기다리다 만큼 초 그만큼 멈췄다가 없음
지금은 (현재시각구한 값)이다.
"{지금:%Y년 %m월 %d일 %H시} ({지금의 요일}요일)"을 출력한다.
생일은 ('2026-10-10'을 '%Y-%m-%d'로 시각해석한 값)이다.
0.5만큼 기다린다.

시각은 연, 월, 일, 시, 분, 초, 요일("월"~"일"), 타임스탬프(1970년부터의 초)를 가진 사전이고, 시간대는 컴퓨터의 지역 시간대입니다.

서식은 %Y, %m, %d, %H, %M, %S 같은 strftime 형식입니다. 서식대로 읽거나 쓰지 못하면 E-TIME-001입니다.

컬렉션과 검색

동사 인자 결과
추가하다 에 목록이나 집합, 을 값 목록 끝에 붙이거나 집합에 넣습니다. 없음을 돌려줍니다
찾다 에서 문자열(또는 목록, 튜플), 을 값 처음 위치, 없으면 없음
있다, 없다 에 컨테이너, 이/가 값 논리. 아래 설명 참고
비어있다 이/가 컬렉션이나 문자열 원소나 글자가 없으면 참. 목록이 비어 있으면:처럼 띄어 써도 됩니다
정렬하다 을 컬렉션, 로 기준(생략 가능) 안정 정렬한 새 목록. 기준은 필드나 키 이름("점수"), 위치(0), 또는 원소를 을/를 인자로 받는 함수((점수구하다))
내림차순정렬하다 을 컬렉션, 로 기준(생략 가능) 큰 것부터 정렬한 새 목록. 같은 값끼리는 원래 순서를 지킵니다
뒤집다 을 컬렉션 역순 새 목록
짝짓다 을 컬렉션, 와 컬렉션 같은 자리 원소끼리 묶은 튜플 목록. 짧은 쪽 길이까지
번호붙이다 에 컬렉션 (번호, 원소) 튜플 목록. 번호는 1부터
지우다 에서 목록(또는 집합, 사전), 을 값 아래 설명 참고
복사하다 을 목록, 집합, 사전, 자료형 값 얕은 복사
합집합구하다, 교집합구하다, 차집합구하다 을 집합, 와 집합 새 집합
포함되다 이/가 집합, 에 집합 부분집합이면 참

있다와 없다는 목록, 튜플, 집합에서는 원소를, 사전에서는 키를, 문자열에서는 부분 문자열을 찾습니다.

지우다는 목록에서는 처음 나오는 같은 값을, 집합에서는 원소를, 사전에서는 키를 지웁니다. 사전에서는 지운 값을, 그 밖에서는 지운 원소를 돌려주며, 지울 것이 없으면 오류입니다.

정렬 기준은 모두 수이거나 모두 문자열이어야 하고, 튜플이면 같은 자리끼리 그래야 합니다. 섞여 있으면 E-TYPE-001, NaN이 있으면 E-VALUE-001입니다.

네트워크

동사 인자 결과
내려받다 에서 주소 GET 요청의 응답 본문
보내다 을 자료, 로 주소 POST 요청의 응답 본문. 문자열은 그대로, 다른 값은 JSON으로 보냅니다
날씨는 ('https://example.com/날씨.json'에서 내려받아서 JSON해석한 값)이다.
({"이름": "이음"}을 'https://example.com/등록'으로 보낸 값)을 출력한다.

HTTP와 HTTPS를 쓰며, 30초 안에 끝나지 않으면 실패합니다. 연결하지 못하면 E-NET-001, 응답 상태가 200번대가 아니면 E-NET-002이고, 둘 다 시도한다로 잡을 수 있습니다.

명령줄 실행과 대화형 실행에서는 네트워크를 쓸 수 있습니다. Rust API에서는 Options::network를 켜야 하며, 꺼져 있으면 E-NET-003입니다.

파일과 경로

상대 경로는 실행을 시작한 폴더를 기준으로 합니다. 절대 경로와 ..도 쓸 수 있습니다.

동사 인자 결과
읽다 을 경로 UTF-8 문자열. 맨 앞의 BOM은 뺍니다
쓰다 을 문자열, 에 경로 덮어씁니다
덧붙이다 을 문자열, 에 경로 끝에 붙입니다. 파일이 없으면 만듭니다
존재하다 이/가 경로 논리
폴더만들다 에 경로 중간 폴더까지 만듭니다
폴더읽다 을 폴더 경로 폴더 안 항목들의 경로 목록. 이름순
파일찾다 을 무늬 무늬에 맞는 파일 경로 목록. 이름순. 아래 설명 참고
파일지우다 을 경로 파일을 지웁니다. 폴더는 지우지 않습니다
옮기다 을 경로, 로 새 경로 파일이나 폴더를 옮기거나 이름을 바꿉니다. 같은 이름의 파일이 있으면 덮어씁니다. 다른 드라이브로는 파일만 옮길 수 있습니다
결합하다 을 경로, 와 경로 이어 붙인 경로
('자료/**/*.csv'를 파일찾은 값) 중 경로마다:
    "{경로의 파일이름}: {(경로를 읽어서 줄분리한 값)의 길이}줄"을 출력한다.

파일찾다의 무늬에서 *는 이름의 아무 부분, ?는 글자 하나, [가-힣]은 묶음 안의 글자 하나, [!0-9]는 묶음 밖의 글자 하나에 맞습니다. 이 셋은 .으로 시작하는 이름에는 맞지 않습니다.

**는 폴더 여러 단계(0단계 포함)에 맞고, 무늬 끝의 **는 그 아래 모든 파일에 맞습니다. 무늬가 /로 끝나면 폴더를 찾습니다. 이름은 NFC로 비교하고, Windows에서는 대소문자를 가리지 않습니다. 읽을 수 없는 폴더는 건너뜁니다.

폴더읽다와 파일찾다가 돌려주는 경로는 쓴 경로에 이름을 결합한 것이라 그대로 읽다에 넘길 수 있습니다. "."를 읽으면 이름만 돌려줍니다.

쓰다와 덧붙이다는 문자열만 받으므로, 다른 값은 문자열변환하다나 JSON변환하다로 먼저 바꿉니다. 쓰기 전체가 원자적으로 이루어진다는 보장은 없습니다.

파일 하나는 16 MiB까지 읽고, 넘으면 E-LIMIT-001입니다. 경로 문자열의 파일이름, 확장자, 상위폴더 속성과 결합하다는 파일에 접근하지 않습니다.

오류 뜻
E-FILE-001 입출력 실패. 파일이 없거나 일반 파일이 아닌 경우, 없는 폴더를 읽는 경우 포함
E-FILE-002 읽은 파일이 UTF-8이 아님
E-FILE-003 실행기를 내장한 프로그램이 파일 함수를 켜지 않음
E-PATH-001 빈 경로, NUL 문자가 든 경로, Windows의 드라이브 상대 경로(C:파일, \파일)
E-PATH-002 운영체제 경로를 Unicode 문자열로 나타낼 수 없음

다른 프로그램과 환경

동사나 이름 인자 결과
실행하다 을 명령(문자열의 목록이나 튜플) 프로그램이 표준 출력에 쓴 글. 끝의 줄바꿈은 뺍니다
환경변수 환경 변수의 사전. 이름과 값은 문자열
(["git", "log", "-1", "--format=%s"]를 실행한 값)을 출력한다.
환경변수에 "HOME"이 있으면:
    환경변수["HOME"]을 출력한다.

명령의 첫 원소가 프로그램, 나머지가 인자입니다. 셸을 거치지 않으므로 인자에 공백이나 따옴표가 있어도 그대로 넘어갑니다.

프로그램은 실행을 시작한 폴더에서 빈 표준 입력으로 시작합니다. 출력은 UTF-8로 읽고, UTF-8이 아닌 바이트는 �로 바꿉니다. 함께 안에서 실행하면 다른 흐름은 프로그램이 끝나기를 기다리지 않습니다.

프로그램을 시작하지 못하면 E-PROC-001, 0이 아닌 종료 코드로 끝나면 E-PROC-002이고, 둘 다 시도한다로 잡을 수 있습니다. E-PROC-002의 메시지에는 프로그램이 표준 오류에 쓴 글이 들어 있습니다.

환경변수는 실행을 시작할 때 읽은 사본이라, 바꿔도 운영체제의 환경은 그대로입니다. Windows에서는 이름을 대문자로 씁니다("PATH").

명령줄 실행, 대화형 실행, ieum test에서는 실행하다와 환경변수를 쓸 수 있습니다. Rust API에서는 Options::system을 켜야 하며, 꺼져 있으면 실행하다는 E-PROC-003이고 환경변수는 빈 사전입니다.

파이썬

--features python으로 빌드한 실행기에서는 파이썬 모듈을 가져와 쓸 수 있습니다. 그렇지 않으면 E-PY-001입니다.

동사 인자 결과
파이썬에서 가져오다 을 모듈 이름이나 .py 파일 경로 모듈
넘파이는 ("numpy"를 파이썬에서 가져온 값)이다.
((넘파이의 mean)으로 [[70, 85, 90]]을 호출한 값)을 출력한다.
판다스는 ("pandas"를 파이썬에서 가져온 값)이다.
표는 ((판다스의 read_csv)로 ["학생.csv"]를 호출한 값)이다.
((표의 sort_values)로 {"by": "점수", "ascending": 거짓}과 호출한 값)을 출력한다.

파이썬 함수는 호출하다로 부릅니다. 위치 인자는 을/를 자리에 목록이나 튜플로, 이름 붙은 인자는 와/과 자리에 문자열 키의 사전으로 넘깁니다. 다른 자리에 인자를 쓰거나 모양이 다르면 E-PY-004입니다.

X의 Y는 속성을, X[i]와 X[a:b]는 원소를 읽고, 바꾼다로 둘 다 바꿀 수 있습니다. X의 길이는 원소 수입니다. 산술, 비교, 반복, 출력과 목록변환하다 같은 변환은 파이썬 규칙을 따릅니다.

파이썬이 돌려준 논리값, 정수, 실수, 문자열, None은 넘파이의 같은 종류 값까지 이음 값으로 바뀌고, 나머지는 파이썬 값 그대로 남습니다. 이음 값은 넘길 때 같은 종류의 파이썬 값으로 바뀌며 목록, 튜플, 집합, 사전은 원소까지 바뀝니다. 함수, 오류, 자료형은 넘길 수 없습니다(E-PY-005). 파이썬 값은 사전의 키로 쓸 수 없고 병렬로 넘길 수 없습니다(E-PAR-002).

.py 파일은 실행을 시작한 폴더를 기준으로 찾고, 그 파일의 폴더에서 다른 모듈을 가져올 수 있습니다. 환경변수 VIRTUAL_ENV가 있으면 그 가상 환경의 패키지를 씁니다.

파이썬 예외는 E-PY-002이고 메시지는 ValueError: math domain error처럼 예외 이름과 설명입니다. 시도한다로 잡을 수 있습니다.

파이썬은 실행하다와 같은 권한이 필요합니다. Rust API에서 Options::system이 꺼져 있으면 E-PY-003입니다.