KonLang English

Tra cứu thư viện

Mọi tên công khai trong thư viện, chữ ký lấy trực tiếp từ mã nguồn. Muốn xem tổng quan kèm ví dụ thì xem Thư viện.

view nghĩa là hàm chỉ đọc, edit là hàm sửa giá trị, còn kiểu không có từ nào nghĩa là giá trị được giao đi. Giá trị tạm chưa truyền được vào view, nên hãy gán vào biến trước.

std/text Chữ

Đổi số và chữ qua lại, tìm kiếm, tách, thay thế, và đọc ghi cả file chữ. Chữ là UTF-8 và vị trí tính theo byte.

import "std/text.kon" as text
of(literal: str): String

Chữ cố định thành String sở hữu.

empty(): String

Chữ rỗng.

copy(value: view String): String

Một bản sao riêng.

fromBytes(bytes: view List<u8>): Option<String>

Chữ từ byte, hoặc none nếu không phải UTF-8 hợp lệ.

toBytes(value: view String): List<u8>

Chữ thành list byte.

fromUint(value: u64): String

Số nguyên không dấu thành chữ.

fromInt(value: i64): String

Số nguyên thành chữ.

fromFloat(value: f64, decimals: u32): Option<String>

Số chữ số thập phân cố định, tối đa 9, làm tròn nửa lên. Trả none với NaN, vô cực, từ 1e15 trở lên, hoặc quá nhiều chữ số.

parseUint(value: view String): Option<u64>

Chỉ gồm chữ số. Trả none với mọi thứ khác, khi không có chữ số, hoặc số quá lớn.

parseInt(value: view String): Option<i64>

Dấu tuỳ chọn rồi đến chữ số. Trả none nếu khác đi, hoặc số quá lớn.

parseFloat(value: view String): Option<f64>

Dạng 12, -1.5, .25 hoặc 2.5e3, làm tròn chính xác. Trả none với mọi thứ khác, kể cả inf, nan và số quá lớn với f64.

fromFloatShortest(value: f64): Option<String>

Chữ ngắn nhất mà đọc lại vẫn đúng giá trị này, như 0.1 hoặc 1e+300. Trả none với NaN và vô cực.

equal(first: view String, second: view String): bool

Hai chữ có giống nhau không.

isText(value: view String, literal: str): bool

Chữ có đúng bằng chữ cố định này không.

compare(first: view String, second: view String): i32

Âm, 0 hoặc dương, so theo byte, tức theo thứ tự code point.

startsWith(value: view String, needle: view String): bool

Có bắt đầu bằng needle không.

endsWith(value: view String, needle: view String): bool

Có kết thúc bằng needle không.

findFrom(value: view String, needle: view String, start: u64): Option<u64>

Vị trí đầu tiên từ start trở đi, nếu có. Needle rỗng được tìm thấy ngay tại start.

find(value: view String, needle: view String): Option<u64>

Vị trí đầu tiên, nếu có.

contains(value: view String, needle: view String): bool

Needle có xuất hiện ở đâu đó không.

substring(value: view String, start: u64, end: u64): Option<String>

Các byte từ start đến end. Trả none nếu ngoài phạm vi hoặc cắt đôi một ký tự.

trim(value: view String): String

Bỏ dấu cách, tab và xuống dòng ở hai đầu.

split(value: view String, separator: view String): List<String>

Các đoạn giữa dấu phân cách, giữ cả đoạn rỗng. Dấu phân cách rỗng cho nguyên chữ thành một đoạn.

lines(value: view String): List<String>

Mỗi dòng một đoạn, với cả \n và \r\n. Xuống dòng ở cuối không tạo thêm dòng rỗng.

join(pieces: view List<String>, separator: view String): String

Ghép các đoạn, xen dấu phân cách ở giữa.

replace(value: view String, old: view String, replacement: view String): String

Đổi mọi chỗ old thành replacement. Old rỗng thì không đổi gì.

toLowerAscii(value: view String): String

Chỉ A đến Z: chữ khác, như chữ có dấu tiếng Việt, giữ nguyên.

toUpperAscii(value: view String): String

Chỉ a đến z.

readFile(path: str): Option<String>

Toàn bộ file. Trả none nếu không đọc được hoặc không phải UTF-8 hợp lệ.

writeFile(path: str, value: view String): bool

Tạo hoặc thay file. File xuất hiện hoàn chỉnh hoặc không có gì.

appendFile(path: str, value: view String): bool

Thêm vào cuối file.

readFileAt(path: view String): Option<String>

Như readFile, với đường dẫn tạo lúc chạy.

writeFileAt(path: view String, value: view String): bool

Như writeFile, với đường dẫn tạo lúc chạy.

argument(index: i32): Option<String>

Một tham số chương trình; số 0 là chính chương trình.

listDirectory(path: str): Option<List<String>>

Tên trong thư mục, đã sắp xếp. Trả none nếu không đọc được.

listDirectoryAt(path: view String): Option<List<String>>

Như listDirectory, với đường dẫn tạo lúc chạy.

isDirectoryAt(path: view String): bool

Đường dẫn này có phải thư mục không.

std/json JSON

Đọc, sửa và ghi JSON, chặt chẽ theo RFC 8259. Mỗi giá trị là số thứ tự của nó trong tài liệu, và giá trị không tồn tại là 0, nên có thể gọi nối tiếp mà không cần kiểm tra từng bước.

import "std/json.kon" as json
struct Document

Toàn bộ giá trị của một tài liệu JSON.

isValid(view self): bool

Parse có thành công không. Tài liệu lỗi không có giá trị nào, và errorText cho biết lý do.

errorText(view self, source: view String): String

Dạng "line 3, column 5: expected , or ] in a list". Rỗng nếu không có lỗi.

root(view self): u64

Giá trị gốc.

exists(view self, value: u64): bool

Giá trị này có tồn tại không.

isNull(view self, value: u64): bool

Có phải null không.

isBool(view self, value: u64): bool

Có phải true hoặc false không.

isNumber(view self, value: u64): bool

Có phải số không.

isText(view self, value: u64): bool

Có phải chữ không.

isArray(view self, value: u64): bool

Có phải list không.

isObject(view self, value: u64): bool

Có phải object không.

numberOr(view self, value: u64, fallback: f64): f64

Giá trị số, hoặc giá trị mặc định.

intOr(view self, value: u64, fallback: i64): i64

Giá trị số nếu nguyên và vừa kiểu, nếu không thì giá trị mặc định.

boolOr(view self, value: u64, fallback: bool): bool

Giá trị true hoặc false, hoặc giá trị mặc định.

textOr(view self, value: u64, fallback: str): String

Bản sao của chữ, hoặc giá trị mặc định.

count(view self, value: u64): u64

Số phần tử của list hoặc số thành viên của object.

first(view self, value: u64): u64

Giá trị đầu tiên của list hoặc object, để duyệt. 0 nghĩa là không có.

next(view self, value: u64): u64

Giá trị kế tiếp. 0 nghĩa là hết.

item(view self, value: u64, index: u64): u64

Phần tử của list theo vị trí. Hàm này duyệt từ đầu, nên muốn đi qua tất cả thì dùng first và next.

keyOf(view self, value: u64): String

Khoá của một thành viên object, hoặc chữ rỗng.

get(view self, value: u64, key: str): u64

Một thành viên của object. Nếu file lặp khoá thì lấy cái cuối, giống JavaScript.

getAt(view self, value: u64, key: view String): u64

Như get, với khoá tạo lúc chạy.

newNull(edit self): u64

Tạo giá trị null.

newBool(edit self, value: bool): u64

Tạo true hoặc false.

newNumber(edit self, value: f64): u64

Tạo số.

newText(edit self, value: str): u64

Tạo chữ từ chữ cố định.

newTextOf(edit self, value: view String): u64

Tạo chữ từ String.

newArray(edit self): u64

Tạo list rỗng.

newObject(edit self): u64

Tạo object rỗng.

setRoot(edit self, value: u64)

Chọn giá trị gốc.

push(edit self, list_: u64, value: u64): bool

Thêm vào cuối list. Trả false nếu giá trị đã có cha, hoặc việc này khiến giá trị nằm trong chính nó.

set(edit self, object: u64, key: str, value: u64): bool

Đặt thành viên của object, thay cái có cùng khoá. Trả false giống như push.

setAt(edit self, object: u64, key: view String, value: u64): bool

Như set, với khoá tạo lúc chạy.

toText(view self, pretty: bool): Option<String>

Giá trị gốc thành chữ JSON, có thụt lề nếu pretty. Trả none nếu chưa có gốc hoặc lồng quá 1000 tầng.

save(view self, path: str): bool

Ghi giá trị gốc ra file, có thụt lề. File xuất hiện hoàn chỉnh hoặc không có gì.

document(): Document

Tài liệu mới, chưa có giá trị và chưa có gốc.

parse(source: view String): Document

Đọc chữ JSON. Kiểm tra isValid trên kết quả.

load(path: str): Document

Đọc file. Nếu không đọc được hoặc JSON sai thì tài liệu không hợp lệ.

std/net Mạng

TCP, UDP, tra tên miền, và server theo dòng xử lý nhiều client trong một luồng. Lệnh có thể lỗi sẽ trả none hoặc false, và lastError cho biết lý do. Socket phải đóng bằng close, vì Kon chưa có destructor.

import "std/net.kon" as net
lastError(): String

Lệnh lỗi gần nhất gặp chuyện gì, viết thành một câu.

struct Address

Địa chỉ và cổng.

toText(view self): String

Dạng chữ, như 127.0.0.1:80. Địa chỉ IPv6 nằm trong ngoặc vuông.

resolve(host: str): Option<List<String>>

Mọi địa chỉ của một tên máy, gồm cả địa chỉ số và localhost. Trả none nếu không tìm thấy.

struct TcpStream

Một kết nối TCP. Đọc đến khi đầu kia đóng thì không còn gì nữa.

read(edit self, out: edit List<u8>): i64

Thêm dữ liệu đang có vào out, chờ ít nhất một byte trừ khi socket không chặn. Trả số byte; 0 khi hết; -2 nếu chưa có gì ở socket không chặn; -1 khi lỗi hoặc quá giờ.

readToEnd(edit self): Option<List<u8>>

Mọi thứ cho đến khi đầu kia đóng. Trả none khi lỗi hoặc quá giờ.

readLine(edit self): Option<String>

Dòng tiếp theo, không gồm ký tự xuống dòng. Cuối cùng là dòng không có xuống dòng, rồi đến none. Cũng trả none khi lỗi, quá giờ, chữ không phải UTF-8, hoặc dòng quá một triệu byte.

writeAll(edit self, bytes: view List<u8>): bool

Gửi hết, chờ nếu cần. Trả false khi lỗi hoặc quá giờ.

writeText(edit self, value: view String): bool

Gửi chữ.

writeLine(edit self, value: view String): bool

Gửi chữ kèm xuống dòng.

setTimeout(edit self, millis: u32): bool

Đọc hoặc ghi được chờ bao lâu, tính bằng mili giây. 0 là không giới hạn.

setNonBlocking(edit self, nonBlocking: bool): bool

Lệnh có trả về ngay thay vì chờ không.

shutdownWrite(edit self): bool

Báo đầu kia là không gửi gì nữa. Vẫn đọc được.

peerAddress(view self): Option<Address>

Địa chỉ của đầu kia.

localAddress(view self): Option<Address>

Địa chỉ của đầu này.

close(edit self): bool

Đóng kết nối. Trả false nếu đã đóng rồi.

connect(host: str, port: u16): Option<TcpStream>

Kết nối tới tên máy hoặc địa chỉ, thử lần lượt các địa chỉ. Trả none khi lỗi.

connectWithin(host: str, port: u16, timeoutMs: i32): Option<TcpStream>

Như connect, bỏ cuộc sau chừng này mili giây ở mỗi địa chỉ.

connectAt(host: view String, port: u16): Option<TcpStream>

Như connect, với tên máy tạo lúc chạy.

struct TcpListener

Chờ kết nối đến.

accept(edit self): Option<TcpStream>

Kết nối tiếp theo, chờ nếu listener không ở chế độ không chặn. Trả none khi lỗi, hoặc khi chưa có ai.

setNonBlocking(edit self, nonBlocking: bool): bool

accept có trả về ngay thay vì chờ không.

localAddress(view self): Option<Address>

Địa chỉ đang nghe, gồm cả cổng hệ thống đã chọn.

close(edit self): bool

Ngừng nghe.

listen(address: str, port: u16): Option<TcpListener>

Nghe trên một địa chỉ: 127.0.0.1 chỉ cho máy này, 0.0.0.0 cho mọi máy. Cổng 0 để hệ thống tự chọn.

struct Datagram

Một datagram đã nhận: các byte và nơi gửi.

textOf(view self): Option<String>

Các byte dạng chữ, hoặc none nếu không phải UTF-8.

size(view self): u64

Số byte.

senderText(view self): String

Người gửi, dạng chữ.

senderPort(view self): u16

Cổng của người gửi.

struct UdpSocket

Socket UDP. Datagram có thể mất, lặp hoặc đến sai thứ tự.

sendTo(edit self, bytes: view List<u8>, address: str, port: u16): bool

Gửi một datagram. Trả false khi lỗi; true không có nghĩa là đã tới nơi.

receive(edit self): Option<Datagram>

Datagram tiếp theo, tối đa 65536 byte. Trả none khi lỗi, quá giờ, hoặc chưa có gì ở socket không chặn.

setTimeout(edit self, millis: u32): bool

receive được chờ bao lâu, tính bằng mili giây. 0 là không giới hạn.

setNonBlocking(edit self, nonBlocking: bool): bool

receive có trả về ngay thay vì chờ không.

localAddress(view self): Option<Address>

Địa chỉ đang gắn, gồm cả cổng hệ thống đã chọn.

close(edit self): bool

Đóng socket.

bindUdp(address: str, port: u16): Option<UdpSocket>

Mở socket UDP trên một địa chỉ. Cổng 0 để hệ thống tự chọn.

waitReadable(stream: view TcpStream, millis: i32): bool

Chờ đến khi kết nối có dữ liệu, tối đa chừng này mili giây. Trả false khi hết giờ hoặc lỗi.

struct Event

Một việc vừa xảy ra trên Server.

isConnected(view self): bool

Có client kết nối.

isLine(view self): bool

Client gửi một dòng.

isDisconnected(view self): bool

Client đã rời đi.

clientId(view self): u64

Client nào, là số không bao giờ dùng lại.

lineText(view self): String

Dòng nhận được, không gồm xuống dòng. Rỗng với các sự kiện khác.

struct Server

Server cho giao thức theo dòng: nhiều client trong một luồng, không client nào giữ chân được các client khác.

clientCount(view self): u64

Số client đang kết nối.

localAddress(view self): Option<Address>

Địa chỉ đang nghe, gồm cả cổng hệ thống đã chọn.

setIdleTimeout(edit self, millis: i64)

Ngắt client không gửi gì trong chừng này thời gian, tính trong lúc poll chờ. Mặc định 0 là không ngắt.

setMaxLine(edit self, bytes: u64)

Ngắt client có dòng dài quá chừng này byte, mặc định 65536.

sendLine(edit self, client: u64, line: view String): bool

Xếp một dòng để gửi cho client. Trả false nếu không có client đó.

broadcast(edit self, line: view String, except: u64): u64

Xếp một dòng cho mọi client trừ một; truyền 0 để không trừ ai. Trả số client được gửi.

disconnect(edit self, client: u64): bool

Ngắt client sau khi gửi xong phần đang chờ. Trả false nếu không có client đó.

clientAddress(view self, client: u64): Option<String>

Địa chỉ của đầu kia, dạng chữ.

poll(edit self, timeoutMs: i32): List<Event>

Làm những gì làm được ngay, chờ tối đa chừng này mili giây, và cho biết chuyện gì đã xảy ra. Số âm là chờ không giới hạn. Gọi trong vòng lặp.

close(edit self)

Đóng mọi client và listener.

serve(address: str, port: u16): Option<Server>

Khởi động server theo dòng. Cổng 0 để hệ thống tự chọn.

std/hash Băm

SHA-256, để biết nội dung có đổi không. Trùng khớp chỉ nói các byte giống nhau, không nói có đáng tin hay không.

import "std/hash.kon" as hash
sha256(bytes: view List<u8>): String

SHA-256 của các byte, gồm 64 chữ số hex viết thường.

sha256Text(value: view String): String

SHA-256 của các byte UTF-8 trong chữ.

std/sys Hệ thống

File dạng byte, thư mục, đồng hồ và tham số chương trình. Phần lớn chương trình nên dùng std/text ở trên nó.

import "std/sys.kon" as sys
readFile(path: str, out: edit List<u8>): bool

Thay out bằng các byte của file. Trả false nếu không đọc được, và out để rỗng.

writeFile(path: str, data: view List<u8>): bool

Tạo hoặc thay file. File xuất hiện hoàn chỉnh hoặc không có gì, nên chương trình có sập cũng không để lại nửa file lưu.

appendFile(path: str, data: view List<u8>): bool

Thêm vào cuối file.

exists(path: str): bool

Đường dẫn này có tồn tại không.

removeFile(path: str): bool

Xoá file.

makeDirectory(path: str): bool

Tạo thư mục; trả true nếu đã có. Thư mục cha phải tồn tại.

makeDirectoryAt(path: view List<u8>): bool

Như makeDirectory, với đường dẫn tạo lúc chạy.

removeDirectoryAt(path: view List<u8>): bool

Xoá thư mục rỗng.

removeFileAt(path: view List<u8>): bool

Như removeFile, với đường dẫn tạo lúc chạy.

readFileAt(path: view List<u8>, out: edit List<u8>): bool

Như readFile, với đường dẫn tạo lúc chạy, dạng byte UTF-8.

writeFileAt(path: view List<u8>, data: view List<u8>): bool

Như writeFile, với đường dẫn tạo lúc chạy.

existsAt(path: view List<u8>): bool

Như exists, với đường dẫn tạo lúc chạy.

isDirectory(path: str): bool

Đường dẫn này có phải thư mục không.

isDirectoryAt(path: view List<u8>): bool

Như isDirectory, với đường dẫn tạo lúc chạy.

listDirectory(path: str): i32

Đọc tên trong thư mục, đã sắp xếp, không có . và .., để dùng với entryName và entryIsDirectory. Trả số lượng tên, hoặc -1 nếu không đọc được. Lần liệt kê sau sẽ thay thế.

listDirectoryAt(path: view List<u8>): i32

Như listDirectory, với đường dẫn tạo lúc chạy.

entryName(index: i32, out: edit List<u8>): bool

Thay out bằng các byte UTF-8 của tên. Trả false nếu không có mục đó.

entryIsDirectory(index: i32): bool

Mục đó có phải thư mục không.

isWindows(): bool

Chương trình có đang chạy trên Windows không.

commandBegin()

Bắt đầu lệnh mới cho runCommand.

commandArgument(value: view List<u8>)

Thêm một tham số; tham số đầu là chương trình. Byte 0 khiến lệnh không chạy được.

runCommand(keep: bool, output: edit List<u8>): bool

Chạy lệnh và chờ. Trả false nếu không khởi chạy được. Với keep, output và lỗi cùng vào output.

commandExitCode(): i32

Mã thoát của lệnh vừa chạy.

addFloat(out: edit List<u8>, value: f64)

Thêm chữ thập phân ngắn nhất mà đọc lại vẫn đúng giá trị hữu hạn này.

readFloat(number: view List<u8>): f64

Giá trị của số thập phân như -1.5e3, làm tròn chính xác. Số quá lớn với f64 thành vô cực.

addText(out: edit List<u8>, text: str)

Thêm các byte của chữ cố định vào list, để tạo đường dẫn và nội dung file.

monotonicMillis(): i64

Mili giây trên đồng hồ không bao giờ chạy lùi; chỉ hiệu số mới có nghĩa.

unixMillis(): i64

Mili giây từ năm 1970 theo đồng hồ hệ thống, đồng hồ này có thể nhảy.

sleepMillis(milliseconds: i32)

Chờ trong khoảng thời gian này.

argumentCount(): i32

Số tham số chương trình; số 0 là chính chương trình.

argument(index: i32, out: edit List<u8>): bool

Thay out bằng các byte UTF-8 của tham số. Trả false nếu không có tham số đó.

std/path Đường dẫn

Đường dẫn file dạng chữ. Trên Windows dùng được cả / và \, còn nơi khác chỉ dùng /. Chỉ walk đụng tới ổ đĩa, và không gì tự xử lý . hay ..

import "std/path.kon" as paths
isAbsolute(value: view String): bool

Đường dẫn có bắt đầu từ gốc không.

join(first: view String, second: view String): String

Đường dẫn thứ hai nằm dưới đường dẫn thứ nhất, trừ khi nó là tuyệt đối hoặc có ổ đĩa thì thay luôn.

baseName(value: view String): String

Tên cuối: game.kon từ a/b/game.kon, và b từ a/b/.

parent(value: view String): String

Thư mục bên trên: a/b từ a/b/game.kon. Rỗng nếu không ghi. Gốc là cha của chính nó.

extension(value: view String): String

Phần mở rộng kèm dấu chấm: .gz từ a.tar.gz, và rỗng nếu không có.

stem(value: view String): String

Tên cuối không có phần mở rộng: a.tar từ a.tar.gz.

walk(folder: view String): Option<List<String>>

Mọi file trong thư mục và các thư mục con, đã sắp xếp. Trả none nếu một thư mục không đọc được hoặc cây sâu quá 64 tầng.

std/args Dòng lệnh

Dòng lệnh. --ten là cờ, --ten=gia_tri mang giá trị, còn lại là từ thường, giữ nguyên thứ tự. Sau -- thì mọi thứ đều là từ thường.

import "std/args.kon" as args
struct Arguments

Dòng lệnh đã đọc.

has(view self, name: str): bool

Cờ này có được truyền không.

valueOr(view self, name: str, fallback: str): String

Giá trị của --ten=gia_tri, hoặc giá trị mặc định nếu thiếu.

count(view self): u64

Số từ thường.

positional(view self, index: u64): Option<String>

Từ thường theo vị trí, hoặc none.

parse(list_: view List<String>): Arguments

Đọc một list tham số, không gồm tên chương trình.

read(): Arguments

Các tham số chương trình được chạy cùng.

std/process Tiến trình

Chạy chương trình khác và chờ nó xong. Không đi qua shell, nên dấu cách và ký hiệu trong tham số được giữ nguyên.

import "std/process.kon" as process
struct Finished

Kết quả của chương trình đã chạy.

didStart(view self): bool

Chương trình có khởi chạy được không.

succeeded(view self): bool

Có chạy và thoát với mã 0 không.

exitCode(view self): i32

Mã thoát, hoặc -1 nếu không khởi chạy được.

outputText(view self): String

Những gì nó in ra, cả output và lỗi, khi chạy bằng runKept. Rỗng nếu không phải UTF-8 hợp lệ.

outputBytes(view self): List<u8>

Như trên, dạng byte thô.

command(program: str): List<String>

List lệnh với chương trình đứng đầu. Thêm tham số vào đó. Tên không có thư mục sẽ được tìm trong PATH.

run(parts: view List<String>): Finished

Chạy, để output đi thẳng ra output của chương trình này, và chờ.

runKept(parts: view List<String>): Finished

Chạy, giữ output trong kết quả, và chờ.

std/map Bảng generic

Bảng băm generic. Không hứa về thứ tự duyệt. Khoá từ nguồn không tin cậy cần hàm băm chống được tấn công.

import "std/map.kon" as map
struct Map

Bảng từ K sang V.

count(view self): u64

Số mục.

get(view self, wanted: view K): Option<view V> from self

View tới giá trị của khoá này, hoặc none.

insert(edit self, ownedKey: K, value: V): Option<V>

Đặt khoá thành giá trị, và trả giá trị cũ nếu có.

remove(edit self, wanted: view K): Option<V>

Xoá khoá, và trả giá trị của nó nếu có.

map<K, V>(): Map<K, V> where K: key.Hash + key.Equal

Bảng rỗng mới.

std/interfaces Khoá của Map

Những gì một kiểu cần có để làm khoá của Map.

import "std/interfaces.kon" as interfaces
interface Hash

Kiểu có hàm băm: func hash(view self): u64

interface Equal

Kiểu so sánh được: func equals(view self, other: view Self): bool

std/intmap Bảng số nguyên

Bảng băm từ i64 sang i64, dùng open addressing.

import "std/intmap.kon" as intmap
struct IntMap

Bảng.

count(view self): u64

Số mục.

contains(view self, key: i64): bool

Khoá có tồn tại không.

get(view self, key: i64): Option<i64>

Giá trị của khoá, hoặc none.

insert(edit self, key: i64, value: i64): Option<i64>

Đặt khoá thành giá trị, và trả giá trị cũ nếu có.

remove(edit self, key: i64): Option<i64>

Xoá khoá, và trả giá trị của nó nếu có.

intMap(): IntMap

Bảng rỗng mới.

std/intset Tập số nguyên

Tập hợp i64, xây trên IntMap.

import "std/intset.kon" as intset
struct IntSet

Tập hợp.

count(view self): u64

Số giá trị.

contains(view self, value: i64): bool

Giá trị có trong tập không.

add(edit self, value: i64): bool

Thêm giá trị, và trả về có phải mới không.

remove(edit self, value: i64): bool

Xoá giá trị, và trả về nó có trong tập không.

intSet(): IntSet

Tập rỗng mới.

std/deque Hàng đợi

Hàng đợi i64, thêm và bớt nhanh ở cả hai đầu.

import "std/deque.kon" as deque
struct IntDeque

Hàng đợi.

count(view self): u64

Số phần tử.

pushBack(edit self, value: i64)

Thêm vào cuối.

pushFront(edit self, value: i64)

Thêm vào đầu.

popFront(edit self): Option<i64>

Lấy ra từ đầu, hoặc none nếu rỗng.

popBack(edit self): Option<i64>

Lấy ra từ cuối, hoặc none nếu rỗng.

get(view self, index: u64): Option<i64>

Phần tử ở vị trí tính từ đầu, hoặc none.

intDeque(): IntDeque

Hàng đợi rỗng mới.

std/heap Hàng đợi ưu tiên

Hàng đợi ưu tiên. Mỗi phần tử là giá trị i64 kèm độ ưu tiên i64, và độ ưu tiên thấp nhất ra trước.

import "std/heap.kon" as heap
struct MinHeap

Hàng đợi.

count(view self): u64

Số phần tử.

push(edit self, priority: i64, value: i64)

Thêm giá trị kèm độ ưu tiên.

pop(edit self): Option<i64>

Giá trị có độ ưu tiên thấp nhất, lấy ra khỏi heap, hoặc none.

minHeap(): MinHeap

Hàng đợi rỗng mới.

std/grid Lưới

Bản đồ 2D gồm các ô i64, có tìm đường ngắn nhất, dùng cho bản đồ ô, bàn cờ và mê cung.

import "std/grid.kon" as grid
struct Grid

Bản đồ.

gridWidth(view self): i64

Chiều rộng.

gridHeight(view self): i64

Chiều cao.

inside(view self, x: i64, y: i64): bool

Ô có nằm trong bản đồ không.

get(view self, x: i64, y: i64, fallback: i64): i64

Giá trị của ô; ngoài bản đồ thì lấy giá trị mặc định.

set(edit self, x: i64, y: i64, value: i64)

Đặt giá trị ô. Ghi ngoài bản đồ bị bỏ qua.

fill(edit self, value: i64)

Đặt mọi ô.

findPath(edit self, startX: i64, startY: i64, goalX: i64, goalY: i64, open: i64): i64

Tìm đường ngắn nhất qua các ô bằng open, đi lên, xuống, trái, phải. Các bước nằm trong routeX và routeY.

routeLength(view self): u64

Số bước của đường vừa tìm.

routeX(view self, step: u64): i64

X của một bước, đánh số từ đầu đường.

routeY(view self, step: u64): i64

Y của một bước.

grid(width: i64, height: i64, value: i64): Grid

Bản đồ mới, mọi ô bằng value.

std/sort Sắp xếp

Sắp xếp list ngay tại chỗ.

import "std/sort.kon" as sort
sortI64(values: edit List<i64>)

Sắp xếp tăng dần, O(n log n) kể cả trường hợp xấu nhất.

isSorted(values: view List<i64>): bool

List có đang tăng dần không.

std/math Toán số nguyên

Toán số nguyên, gồm cả sin và cos quy về số nguyên.

import "std/math.kon" as math
minI64(a: i64, b: i64): i64

Số nhỏ hơn.

maxI64(a: i64, b: i64): i64

Số lớn hơn.

clampI64(value: i64, low: i64, high: i64): i64

Giữ value trong khoảng low đến high.

absI64(value: i64): i64

Giá trị tuyệt đối.

gcd(first: u64, second: u64): u64

Ước chung lớn nhất; gcd(0, 0) là 0.

isqrt(value: u64): u64

Số r lớn nhất sao cho r * r <= value.

powI64(base: i64, exponent: u64): i64

Luỹ thừa số nguyên. Tràn thì quay vòng, như các phép tính số nguyên khác.

sinDegrees(angle: i64): i64

Sin của góc tính bằng độ, quy đổi sao cho 1000 là 1.0, chính xác khoảng 0,2%.

cosDegrees(angle: i64): i64

Cos, quy đổi cùng cách.

std/fixed Số cố định

Số thập phân cố định: một i64 giữ giá trị nhân 65536, nên tính được phân số mà không cần số thực. Cộng trừ bằng + và - bình thường.

import "std/fixed.kon" as fixed
one(): i64

Giá trị 1.

fromInt(value: i64): i64

Số nguyên thành số cố định.

toInt(value: i64): i64

Thành số nguyên, làm tròn về phía âm vô cực.

fromRatio(numerator: i64, denominator: i64): i64

numerator / denominator; fromRatio(3, 2) là 1.5.

mul(a: i64, b: i64): i64

Nhân.

div(a: i64, b: i64): i64

Chia.

sqrt(value: i64): i64

Căn bậc hai; số âm cho 0.

lerp(a: i64, b: i64, t: i64): i64

Giá trị nằm giữa a và b; t chạy từ 0 đến one().

sinDegrees(angle: i64): i64

Sin của góc tính bằng độ nguyên.

cosDegrees(angle: i64): i64

Cos của góc tính bằng độ nguyên.

length(x: i64, y: i64): i64

Độ dài của vector (x, y).

std/random Số ngẫu nhiên

Bộ sinh số nhỏ, nhanh và lặp lại được. Hợp cho game và mô phỏng, không dùng cho bảo mật.

import "std/random.kon" as random
struct Random

Bộ sinh số.

next(edit self): u64

Giá trị tiếp theo trên toàn bộ u64.

below(edit self, limit: u64): u64

Giá trị từ 0 đến dưới limit. Limit bằng 0 cho 0.

between(edit self, low: i64, high: i64): i64

Giá trị từ low đến high, gồm cả high.

chance(edit self, percent: u64): bool

Trả true với xác suất percent trên 100.

random(seed: u64): Random

Cùng seed cho cùng dãy số.