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): StringChữ cố định thành String sở hữu.
empty(): StringChữ rỗng.
copy(value: view String): StringMộ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): StringSố nguyên không dấu thành chữ.
fromInt(value: i64): StringSố 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): boolHai chữ có giống nhau không.
isText(value: view String, literal: str): boolChữ 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): boolCó bắt đầu bằng needle không.
endsWith(value: view String, needle: view String): boolCó 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): boolNeedle 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): StringBỏ 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): StringGhé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): StringChỉ A đến Z: chữ khác, như chữ có dấu tiếng Việt, giữ nguyên.
toUpperAscii(value: view String): StringChỉ 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): boolTạ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): boolThê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): boolNhư 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 DocumentToàn bộ giá trị của một tài liệu JSON.
isValid(view self): boolParse 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): StringDạng "line 3, column 5: expected , or ] in a list". Rỗng nếu không có lỗi.
root(view self): u64Giá trị gốc.
exists(view self, value: u64): boolGiá trị này có tồn tại không.
isNull(view self, value: u64): boolCó phải null không.
isBool(view self, value: u64): boolCó phải true hoặc false không.
isNumber(view self, value: u64): boolCó phải số không.
isText(view self, value: u64): boolCó phải chữ không.
isArray(view self, value: u64): boolCó phải list không.
isObject(view self, value: u64): boolCó phải object không.
numberOr(view self, value: u64, fallback: f64): f64Giá trị số, hoặc giá trị mặc định.
intOr(view self, value: u64, fallback: i64): i64Giá 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): boolGiá trị true hoặc false, hoặc giá trị mặc định.
textOr(view self, value: u64, fallback: str): StringBản sao của chữ, hoặc giá trị mặc định.
count(view self, value: u64): u64Số phần tử của list hoặc số thành viên của object.
first(view self, value: u64): u64Giá trị đầu tiên của list hoặc object, để duyệt. 0 nghĩa là không có.
next(view self, value: u64): u64Giá trị kế tiếp. 0 nghĩa là hết.
item(view self, value: u64, index: u64): u64Phầ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): StringKhoá của một thành viên object, hoặc chữ rỗng.
get(view self, value: u64, key: str): u64Mộ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): u64Như get, với khoá tạo lúc chạy.
newNull(edit self): u64Tạo giá trị null.
newBool(edit self, value: bool): u64Tạo true hoặc false.
newNumber(edit self, value: f64): u64Tạo số.
newText(edit self, value: str): u64Tạo chữ từ chữ cố định.
newTextOf(edit self, value: view String): u64Tạo chữ từ String.
newArray(edit self): u64Tạo list rỗng.
newObject(edit self): u64Tạo object rỗng.
setRoot(edit self, value: u64)Chọn giá trị gốc.
push(edit self, list_: u64, value: u64): boolThê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): boolNhư 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): boolGhi 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(): DocumentTà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(): StringLệ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): StringDạ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 TcpStreamMộ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>): i64Thê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>): boolGửi hết, chờ nếu cần. Trả false khi lỗi hoặc quá giờ.
writeText(edit self, value: view String): boolGửi chữ.
writeLine(edit self, value: view String): boolGử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): boolLệnh có trả về ngay thay vì chờ không.
shutdownWrite(edit self): boolBá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 TcpListenerChờ 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): boolaccept 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): boolNgừ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 DatagramMộ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): u64Số byte.
senderText(view self): StringNgười gửi, dạng chữ.
senderPort(view self): u16Cổng của người gửi.
struct UdpSocketSocket 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): boolGử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): boolreceive đượ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): boolreceive 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): boolChờ đế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 EventMột việc vừa xảy ra trên Server.
isConnected(view self): boolCó client kết nối.
isLine(view self): boolClient gửi một dòng.
isDisconnected(view self): boolClient đã rời đi.
clientId(view self): u64Client nào, là số không bao giờ dùng lại.
lineText(view self): StringDòng nhận được, không gồm xuống dòng. Rỗng với các sự kiện khác.
struct ServerServer 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): u64Số 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): boolXế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): u64Xế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): boolNgắ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>): StringSHA-256 của các byte, gồm 64 chữ số hex viết thường.
sha256Text(value: view String): StringSHA-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>): boolThay 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>): boolTạ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>): boolThê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): boolXoá file.
makeDirectory(path: str): boolTạo thư mục; trả true nếu đã có. Thư mục cha phải tồn tại.
makeDirectoryAt(path: view List<u8>): boolNhư makeDirectory, với đường dẫn tạo lúc chạy.
removeDirectoryAt(path: view List<u8>): boolXoá thư mục rỗng.
removeFileAt(path: view List<u8>): boolNhư removeFile, với đường dẫn tạo lúc chạy.
readFileAt(path: view List<u8>, out: edit List<u8>): boolNhư 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>): boolNhư writeFile, với đường dẫn tạo lúc chạy.
existsAt(path: view List<u8>): boolNhư 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>): boolNhư 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>): i32Như listDirectory, với đường dẫn tạo lúc chạy.
entryName(index: i32, out: edit List<u8>): boolThay out bằng các byte UTF-8 của tên. Trả false nếu không có mục đó.
entryIsDirectory(index: i32): boolMục đó có phải thư mục không.
isWindows(): boolChươ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>): boolChạ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(): i32Mã 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>): f64Giá 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(): i64Mili giây trên đồng hồ không bao giờ chạy lùi; chỉ hiệu số mới có nghĩa.
unixMillis(): i64Mili 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(): i32Số tham số chương trình; số 0 là chính chương trình.
argument(index: i32, out: edit List<u8>): boolThay 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): StringTên cuối: game.kon từ a/b/game.kon, và b từ a/b/.
parent(value: view String): StringThư 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): StringPhầ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): StringTê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 ArgumentsDòng lệnh đã đọc.
has(view self, name: str): boolCờ này có được truyền không.
valueOr(view self, name: str, fallback: str): StringGiá trị của --ten=gia_tri, hoặc giá trị mặc định nếu thiếu.
count(view self): u64Số 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(): ArgumentsCá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 FinishedKết quả của chương trình đã chạy.
didStart(view self): boolChương trình có khởi chạy được không.
succeeded(view self): boolCó chạy và thoát với mã 0 không.
exitCode(view self): i32Mã thoát, hoặc -1 nếu không khởi chạy được.
outputText(view self): StringNhữ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>): FinishedChạy, để output đi thẳng ra output của chương trình này, và chờ.
runKept(parts: view List<String>): FinishedChạ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 MapBảng từ K sang V.
count(view self): u64Số mục.
get(view self, wanted: view K): Option<view V> from selfView 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.EqualBả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 HashKiểu có hàm băm: func hash(view self): u64
interface EqualKiể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 IntMapBảng.
count(view self): u64Số mục.
contains(view self, key: i64): boolKhoá 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(): IntMapBả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 IntSetTập hợp.
count(view self): u64Số giá trị.
contains(view self, value: i64): boolGiá trị có trong tập không.
add(edit self, value: i64): boolThêm giá trị, và trả về có phải mới không.
remove(edit self, value: i64): boolXoá giá trị, và trả về nó có trong tập không.
intSet(): IntSetTậ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 IntDequeHàng đợi.
count(view self): u64Số 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(): IntDequeHà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 MinHeapHàng đợi.
count(view self): u64Số 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(): MinHeapHà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 GridBản đồ.
gridWidth(view self): i64Chiều rộng.
gridHeight(view self): i64Chiề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): i64Giá 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): i64Tì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): u64Số bước của đường vừa tìm.
routeX(view self, step: u64): i64X của một bước, đánh số từ đầu đường.
routeY(view self, step: u64): i64Y của một bước.
grid(width: i64, height: i64, value: i64): GridBả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>): boolList 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): i64Số nhỏ hơn.
maxI64(a: i64, b: i64): i64Số lớn hơn.
clampI64(value: i64, low: i64, high: i64): i64Giữ value trong khoảng low đến high.
absI64(value: i64): i64Giá trị tuyệt đối.
gcd(first: u64, second: u64): u64Ước chung lớn nhất; gcd(0, 0) là 0.
isqrt(value: u64): u64Số r lớn nhất sao cho r * r <= value.
powI64(base: i64, exponent: u64): i64Luỹ 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): i64Sin 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): i64Cos, 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(): i64Giá trị 1.
fromInt(value: i64): i64Số nguyên thành số cố định.
toInt(value: i64): i64Thành số nguyên, làm tròn về phía âm vô cực.
fromRatio(numerator: i64, denominator: i64): i64numerator / denominator; fromRatio(3, 2) là 1.5.
mul(a: i64, b: i64): i64Nhân.
div(a: i64, b: i64): i64Chia.
sqrt(value: i64): i64Căn bậc hai; số âm cho 0.
lerp(a: i64, b: i64, t: i64): i64Giá trị nằm giữa a và b; t chạy từ 0 đến one().
sinDegrees(angle: i64): i64Sin của góc tính bằng độ nguyên.
cosDegrees(angle: i64): i64Cos 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 RandomBộ sinh số.
next(edit self): u64Giá trị tiếp theo trên toàn bộ u64.
below(edit self, limit: u64): u64Giá trị từ 0 đến dưới limit. Limit bằng 0 cho 0.
between(edit self, low: i64, high: i64): i64Giá trị từ low đến high, gồm cả high.
chance(edit self, percent: u64): boolTrả true với xác suất percent trên 100.
random(seed: u64): RandomCùng seed cho cùng dãy số.