Функция передачи Ti-basic в качестве аргумента другой функции

В Matlab вы можете объявить анонимную функцию и передать ее другой функции.

[y] = someFunction(@(x) x.^2 , [a bunch of numbers]);

Я хотел бы сделать что-то подобное на своем калькуляторе TI-89. У меня есть функция, которая принимает "математическую функцию" в качестве одного из своих аргументов, и я пытаюсь сделать это следующим образом:

myfunction(3/x,1,2)

и моя функция выглядит примерно так:

myfunction(f,xl,xu)
Func
local a,b
f(xl)→a
f(xu)→b
Return [a,b]
EndFunc

Я знаю, что могу вводить свои функции в редакторе "y=", а затем получать к ним доступ внутри функции, но мне бы очень хотелось иметь возможность напрямую вводить математическую функцию в качестве аргумента. Как я могу это сделать?


person Justin Moser    schedule 07.05.2014    source источник


Ответы (2)


Встроенная функция expr в TI-BASIC может использоваться для преобразования строки в выражение. Вот как реализовать вашу функцию таким образом:

myfunction(f,xl,xu)
Func
Local a,b,x

xl→x
expr(f)→a

xu→x
expr(f)→b

Return [a,b]
EndFunc

Вызов вашей функции будет myfunction("3/x",1,2). Не забудьте заключить определение f в двойные кавычки, чтобы оно рассматривалось как строка.

person Josh    schedule 28.05.2015

«TI-89 BASIC не имеет первоклассных функций; хотя определения функций, хранящиеся в переменных, являются полностью динамическими, невозможно извлечь значение функции из переменной вместо ее вызова. В этом случае мы используем оператор косвенности. #, который принимает строку и возвращает значение именованной переменной, чтобы использовать имя функции как нечто, что нужно передать."

http://rosettacode.org/wiki/Higher-order_functions#TI-89_BASIC

person eigenfield    schedule 15.05.2014
comment
Это решение ограничено тем, что вы можете использовать только предопределенные функции. Смотрите мой ответ для более общего решения. - person Josh; 28.05.2015