Як поміняти елементи у векторі за допомогою анонімної функції в Octave?


15

Заміна двох елементів у векторі / матриці в Octave дуже проста:

x='abcde';
x([4,1])=x([1,4])
x = 
   dbcae

На жаль, мені ще не вдалося знайти спосіб це зробити в анонімній функції. Хоча функція, наведена нижче, синтаксично правильна, вона повертає лише два елементи, які розміщуються, а не весь xвектор:

f=@(x)(x([4,1])=x([1,4]))
f(x)
ans = 
     ad

Чи є спосіб досягти бажаної поведінки, використовуючи анонімні функції в гольфі? Чи можна замінити кілька елементів таким чином за допомогою анонімної функції?

Я міг би створити вектор індексації: f=@(x)x([4,2,3,1,5])але динамічне створення такого вектора, ймовірно, також займе багато байтів.


Відповіді:


21

Список аргументів

f=@(x,y=x([4 1])=x([1 4]))x;

Спробуйте в Інтернеті!


5
Зачекайте що ? Я ніколи не знав, що це можливо в Октаві. Це відкриває стільки нових прийомів ....
Санчіз

4
Що в ...?
Стюі Гріффін

1
Будь ласка, опублікуйте це у питанні Поради щодо Октави! За допомогою цієї методики ви в основному можете робити все в списку аргументів, тому вам ніколи більше не потрібно обирати між "повною" та анонімною функцією. Я в шоці.
Санчіз

3
Дивовижний. До речі, ви можете зняти фінал ;для підрахунку байтів
Луїс Мендо

Дякуємо всім. @ Sanchises Здається, що Октава - шокуюча мова. Будь обережний! Він додається до порад.
rahnema1

11

Бути eval

f=@(x)eval"x([4 1])=x([1 4])"

Спробуйте в Інтернеті!


У Matlab дужки не можна опустити:

f=@(x)eval('x([4 1])=x([1 4])')

9
Лише на PPCG є evalвідповідь :-)
Стюі Гріффін

Ви хочете додати це до питання про поради Octave? forцикл у анонімній функції, використовуючи evalзбережений там багато байтів, і, ймовірно, це можна зробити і для багатьох інших викликів ,,,
Стюі Гріффін,

Не впевнений, чи це колись гольфіст, але я вважаю, що ви можете це зробити навіть без анонімної функції: s='x([1 4])=x([4 1])';eval(s)- Я вважаю, що це в основному цікаво, якщо ви вже зробили функцію робити eval з мінімальними символами.
Денніс Джахеруддін


2
Я думаю, що ця відповідь є єдиним таким чином, що є дійсними Октавою та Матлабом.
Бетмен

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.