Hump-day puzzler - Unknown Function

조회 수: 9 (최근 30일)
Matt Fig
Matt Fig 2011년 5월 25일
My colleague was working with MATLAB and defined an anonymous function F. When he saw me come in he typed clc, hit return than challenged me to guess the form of the function only by calling it however many times I want. After calling it many times, I have figured out that it takes a scalar argument, and when the value of the argument is greater than 0 it does this:
>> F(1)
Name Size Bytes Class Attributes
---- 0;']) ------------------------------------------
x 1x1 8 double
And when the value of the argument is less than zero, it appears to do nothing:
>> F(-1)
>>
Can you help me figure out what the function looks like?
  댓글 수: 2
Matt Fig
Matt Fig 2011년 5월 25일
Hint #1. The function does not call an M-File
Matt Fig
Matt Fig 2011년 5월 25일
Hint #2. Here's how I know the function wants a scalar argument...
>> S.one = 't';
>> F(S)
>> F({3})
>> F(magic(2))
>>

댓글을 달려면 로그인하십시오.

채택된 답변

Laura Proctor
Laura Proctor 2011년 5월 25일
I get the sense that this is not exactly what the user did, but this seems to do what is expected as a first try:
F=@(x) eval('if isscalar(x)&&x>0, whos x, end')
===========================
Second iterate: I needed to add in a check for type double. It also prints out the funky characters with WHOS (but without any functionality). :oP
F=@(x) eval(['if isscalar(x)&&isa(x,''double'')&&x>0, whos x, end; 1>0;'])
  댓글 수: 5
Matt Fig
Matt Fig 2011년 5월 25일
Do you know why WHOS prints this way when used like that? I.E., why it behaves differently than it does here:
F=@(x) eval(['if isscalar(x)&&isa(x,''double'')&&x<0, whos x, end; 1<0;'])
Matt Fig
Matt Fig 2011년 5월 25일
@Oleg, you aren't the only one who doesn't understand why this happens. I was hoping Laura could shed some light. See my previous comment.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Sean de Wolski
Sean de Wolski 2011년 5월 25일
Tough one! In lieu of a real way to name a function/function handle: 0;'])
F = @(x)HDC525(x);
and:
function HDC525(x)
%SCd 5/25/2011: Lame attempt at HD challenger
if ~isscalar(x)||x<=0
return
else
Str = evalc('whos x');
fprintf('%s\n ---- 0;'']) ------------------------------------------\n %s',Str(1:numel(Str)/2-1),Str(numel(Str)/2+1:end));
end
  댓글 수: 2
Matt Fig
Matt Fig 2011년 5월 25일
See Hint #1. Though I think you know this. I will post Hint #2 in a little while. This is a tough one!
Sean de Wolski
Sean de Wolski 2011년 5월 25일
I know it doesn't. And I know that 'whos' will put the function handle's meat where you have _0;'])_ but I know how to overwrite it. Arghhhhh.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Startup and Shutdown에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by