listlib
:: singleMerge
Слияние двух упорядоченных списков без копий
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
listlib::singleMerge(list1
, list2
, <function
>)
listlib::singleMerge(list1, list2)
объединяет оба списка в один список. Это принято, что списки “разобщены”, никакой элемент не появляется в обоих списках. В противном случае такие элементы вставляются только однажды в списке результатов.
С третьим дополнительным аргументом функция может состоять в том, учитывая, что сравнивают элементы списков, и к тому же определяет порядок элементов. Заданная функция вызвана двумя элементами и должна возвратить TRUE
, если эти два элемента находятся в правильном порядке, в противном случае FALSE
(см. следующий абзац).
Заданная функция называется шаг за шагом с элементом первого списка так же первым аргументом и элементом второго списка как второй аргумент, пока это не возвращает FALSE
. Затем элемент второго списка вставляется в первый список перед последним доказанным элементом (см. Пример 3).
Списки должны быть упорядочены относительно функции порядка, в противном случае элементы могли быть вставлены в неправильном месте.
Если никакому третьему аргументу не дают, функциональный _less
используется. Если никакой порядок элементов относительно _less
не задан, функция должна быть дана, в противном случае ошибка появляется. Системная функция sysorder
всегда может использоваться.
Слияние двух возрастаний заказало списки:
listlib::singleMerge([1, 3, 5, 7], [2, 4, 6, 8])
Слияние двух убываний заказало списки:
listlib::singleMerge([7, 5, 3, 1], [8, 6, 4, 2], _not@_less)
Слияние двух возрастаний заказало списки с копиями:
listlib::singleMerge([1, 2, 5, 7], [2, 5, 6, 8])
Но следующие списки не содержат взаимные равные элементы:
listlib::singleMerge([1, 1, 3, 3], [2, 2, 4, 4])
Следующий пример показывает, как выражения могут быть упорядочены определяемым пользователем приоритетом. Это распоряжение дано функцией с именем priority
, который возвращает меньшее число, когда выражение имеет тип с более высоким приоритетом:
priority := X -> contains(["_power", "_mult", "_plus"], type(X)): priority(x^2), priority(x + 2)
Функциональный sortfunc
возвращает TRUE
, если оба данных аргумента находятся в правильном порядке, т.е. первый аргумент имеет более высокое (или равный) приоритет, чем второй аргумент:
sortfunc := (X, Y) -> bool(priority(Y) > priority(X)): sortfunc(x^2, x + 2), sortfunc(x + 2, x*2)
Теперь оба списка объединены относительно уделенного первостепенное значение:
listlib::singleMerge([x^y, x*2, -y], [x^2, x*y, x + y], sortfunc)
delete priority, sortfunc:
|
Список MuPAD® |
|
Функция, которая определяет порядок слияния |
Упорядоченный список, который содержит элементы обоих списков