mirror of
https://github.com/erg-lang/erg.git
synced 2025-10-02 21:44:34 +00:00
feat: add Array.update_nth!
This commit is contained in:
parent
07e37c878c
commit
74bca70017
7 changed files with 87 additions and 15 deletions
|
@ -2423,7 +2423,7 @@ impl Context {
|
|||
NoneType,
|
||||
)
|
||||
.quantify();
|
||||
array_mut_.register_py_builtin(PROC_PUSH, t, Some(FUNC_APPEND), 14);
|
||||
array_mut_.register_py_builtin(PROC_PUSH, t, Some(FUNC_APPEND), 15);
|
||||
let t_extend = pr_met(
|
||||
ref_mut(
|
||||
array_mut_t.clone(),
|
||||
|
@ -2438,7 +2438,7 @@ impl Context {
|
|||
NoneType,
|
||||
)
|
||||
.quantify();
|
||||
array_mut_.register_py_builtin(PROC_EXTEND, t_extend, Some(FUNC_EXTEND), 23);
|
||||
array_mut_.register_py_builtin(PROC_EXTEND, t_extend, Some(FUNC_EXTEND), 24);
|
||||
let t_insert = pr_met(
|
||||
ref_mut(
|
||||
array_mut_t.clone(),
|
||||
|
@ -2453,7 +2453,7 @@ impl Context {
|
|||
NoneType,
|
||||
)
|
||||
.quantify();
|
||||
array_mut_.register_py_builtin(PROC_INSERT, t_insert, Some(FUNC_INSERT), 32);
|
||||
array_mut_.register_py_builtin(PROC_INSERT, t_insert, Some(FUNC_INSERT), 33);
|
||||
let t_remove = pr_met(
|
||||
ref_mut(
|
||||
array_mut_t.clone(),
|
||||
|
@ -2468,7 +2468,7 @@ impl Context {
|
|||
NoneType,
|
||||
)
|
||||
.quantify();
|
||||
array_mut_.register_py_builtin(PROC_REMOVE, t_remove, Some(FUNC_REMOVE), 41);
|
||||
array_mut_.register_py_builtin(PROC_REMOVE, t_remove, Some(FUNC_REMOVE), 42);
|
||||
let t_pop = pr_met(
|
||||
ref_mut(
|
||||
array_mut_t.clone(),
|
||||
|
@ -2483,7 +2483,7 @@ impl Context {
|
|||
T.clone(),
|
||||
)
|
||||
.quantify();
|
||||
array_mut_.register_py_builtin(PROC_POP, t_pop, Some(FUNC_POP), 51);
|
||||
array_mut_.register_py_builtin(PROC_POP, t_pop, Some(FUNC_POP), 52);
|
||||
let t_clear = pr0_met(
|
||||
ref_mut(
|
||||
array_mut_t.clone(),
|
||||
|
@ -2492,7 +2492,7 @@ impl Context {
|
|||
NoneType,
|
||||
)
|
||||
.quantify();
|
||||
array_mut_.register_py_builtin(PROC_CLEAR, t_clear, Some(FUNC_CLEAR), 60);
|
||||
array_mut_.register_py_builtin(PROC_CLEAR, t_clear, Some(FUNC_CLEAR), 61);
|
||||
let t_sort = pr_met(
|
||||
ref_mut(array_mut_t.clone(), None),
|
||||
vec![],
|
||||
|
@ -2504,9 +2504,9 @@ impl Context {
|
|||
NoneType,
|
||||
)
|
||||
.quantify();
|
||||
array_mut_.register_py_builtin(PROC_SORT, t_sort, Some(FUNC_SORT), 77);
|
||||
array_mut_.register_py_builtin(PROC_SORT, t_sort, Some(FUNC_SORT), 78);
|
||||
let t_reverse = pr0_met(ref_mut(array_mut_t.clone(), None), NoneType).quantify();
|
||||
array_mut_.register_py_builtin(PROC_REVERSE, t_reverse, Some(FUNC_REVERSE), 86);
|
||||
array_mut_.register_py_builtin(PROC_REVERSE, t_reverse, Some(FUNC_REVERSE), 87);
|
||||
let t = pr_met(
|
||||
array_mut_t.clone(),
|
||||
vec![kw(KW_FUNC, nd_func(vec![anon(T.clone())], None, T.clone()))],
|
||||
|
@ -2515,7 +2515,16 @@ impl Context {
|
|||
NoneType,
|
||||
)
|
||||
.quantify();
|
||||
array_mut_.register_py_builtin(PROC_STRICT_MAP, t, None, 95);
|
||||
array_mut_.register_py_builtin(PROC_STRICT_MAP, t, None, 96);
|
||||
let t_update_nth = pr_met(
|
||||
ref_mut(array_mut_t.clone(), None),
|
||||
vec![kw(KW_IDX, Nat), kw(KW_FUNC, func1(T.clone(), T.clone()))],
|
||||
None,
|
||||
vec![],
|
||||
NoneType,
|
||||
)
|
||||
.quantify();
|
||||
array_mut_.register_py_builtin(PROC_UPDATE_NTH, t_update_nth, Some(FUNC_UPDATE_NTH), 105);
|
||||
let f_t = kw(
|
||||
KW_FUNC,
|
||||
func(vec![kw(KW_OLD, arr_t.clone())], None, vec![], arr_t.clone()),
|
||||
|
|
|
@ -228,6 +228,8 @@ const PY_MODULE: &str = "PyModule";
|
|||
const GENERIC_ARRAY: &str = "GenericArray";
|
||||
const ARRAY: &str = "Array";
|
||||
const MUT_ARRAY: &str = "Array!";
|
||||
const FUNC_UPDATE_NTH: &str = "update_nth";
|
||||
const PROC_UPDATE_NTH: &str = "update_nth!";
|
||||
const FUNC_PARTITION: &str = "partition";
|
||||
const FUNC_DEDUP: &str = "dedup";
|
||||
const FUNC_CONCAT: &str = "concat";
|
||||
|
@ -427,6 +429,8 @@ const FUNDAMENTAL_LEN: &str = "__len__";
|
|||
const FUNDAMENTAL_CONTAINS: &str = "__contains__";
|
||||
const FUNDAMENTAL_CALL: &str = "__call__";
|
||||
const FUNDAMENTAL_NAME: &str = "__name__";
|
||||
const FUNDAMENTAL_FILE: &str = "__file__";
|
||||
const FUNDAMENTAL_PACKAGE: &str = "__package__";
|
||||
const FUNDAMENTAL_STR: &str = "__str__";
|
||||
const FUNDAMENTAL_HASH: &str = "__hash__";
|
||||
const FUNDAMENTAL_INT: &str = "__int__";
|
||||
|
@ -1075,6 +1079,20 @@ impl Context {
|
|||
vis.clone(),
|
||||
Some(FUNDAMENTAL_NAME),
|
||||
);
|
||||
self.register_builtin_py_impl(
|
||||
FUNDAMENTAL_FILE,
|
||||
Str,
|
||||
Immutable,
|
||||
vis.clone(),
|
||||
Some(FUNDAMENTAL_FILE),
|
||||
);
|
||||
self.register_builtin_py_impl(
|
||||
FUNDAMENTAL_PACKAGE,
|
||||
Str | NoneType,
|
||||
Immutable,
|
||||
vis.clone(),
|
||||
Some(FUNDAMENTAL_PACKAGE),
|
||||
);
|
||||
if ERG_MODE {
|
||||
self.register_builtin_py_impl(
|
||||
FUNC_MODULE,
|
||||
|
|
|
@ -94,3 +94,12 @@ array = pyimport "Array"
|
|||
assert arr == [3, 4]
|
||||
'''
|
||||
strict_map!: |T, N: Nat|(self: Array!(T, N), f: T -> T) => NoneType
|
||||
'''
|
||||
Update `index`-th element of the array according to the passed function `f`.
|
||||
'''
|
||||
'''erg
|
||||
arr = ![1, 2]
|
||||
arr.udpate_nth! 0, x -> x + 1
|
||||
assert arr == [2, 2]
|
||||
'''
|
||||
update_nth!: |T, N: Nat|(self: Array!(T, N), index: Nat, f: T -> T) => NoneType
|
||||
|
|
|
@ -69,3 +69,6 @@ class Array(list):
|
|||
if not contains_operator(elem_t, elem):
|
||||
return False
|
||||
return True
|
||||
|
||||
def update_nth(self, index, f):
|
||||
self[index] = f(self[index])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue