2009-07-22 5 views

답변

3

음, 에릭의 대답의 단점은 을 그것은리스트의 모든 요소에 대해 OddQ를 실행한다는 것입니다. 제 전화는 상대적으로 비용이 많이 들며, 너무 자주 계산하는 것은 잘못되었습니다. 또한, 임의성의 요소는 분명히 불필요합니다. 첫 번째 것은 저와 잘 맞습니다.

그럼, 어떻게

SelectAny[list_List, criterion_] := 
Catch[Scan[ If[criterion[#], Throw[#, "result"]] &, list]; 
    Throw["No such element"], "result"] 

그리고

SelectAny[{1, 2, 3, 4, 5}, OddQ] 

반환 1.

나는 아직도 무언가를하고자하는이 매스 매 티카에 내장 된

에 대해. 집에서 만든 양조 기능을 사용하면 많은 직접적인 이익을 가져 오지 않고 프로그램을 확대 할 수 있습니다.

+0

Mathematica는 이미 많은 수의 내장 함수를 포함하고있는 것처럼 보입니다. 어떤 단계에서, 제 생각에, 모든 것을 상자에서 제공하지는 않는다고 받아 들여야합니다. –

1

"선택"은 조건을 만족하는 모든 요소를 ​​가져옵니다. 따라서

In[43]:= Select[ {1, 2, 3, 4, 5}, OddQ ] 
Out[43]= {1, 3, 5} 

아니면 일치하는 요소 하나를 무작위로 선택하겠습니까? 나는 내장 아무것도 모르는,하지만 당신은 매우 신속하게 정의 할 수 있습니다 :

Any[lst_, q_] := 
    Select[ lst, q] // (Part[#, 1 + Random[Integer, Length[#] - 1]]) & 

어떤 당신이 사용할 수있는 동일한 방법 ::

In[51]:= Any[ {1, 2, 3, 4, 5}, OddQ ] 
Out[51]= 3 
1

당신은 Scan

fstp[p_, l_List] := Scan[ [email protected]# && [email protected]# &, l ] 

Return 비교적 쉽게 할 수있는 그래서

In[2]:= OddQ ~fstp~ Range[1,5] 
Out[2]= 1 
In[3]:= EvenQ ~fstp~ Range[1,5] 
Out[3]= 2 

정말 티카는 게으르게 평가 표현을 할 몇 가지 옵션을 가질 수 바랍니다. 그냥 결과의 최대 수 인, Select에 세번째 인수를 일치하는 첫 번째 요소 다음에 돌려 사용하려는 경우와 같은 하스켈 같은 게으른 언어에서, 당신은 단지 일반

fstp p = head . filter p 
+1

일반적으로 기호에 HoldFirst/HoldRest/HoldAll 속성을 사용하여 지연 평가를 적절하게 근사시킬 수 있습니다. 또한 썽크로 줄 바꿈으로써 지연되는 익숙한 트릭을 얻을 수 있습니다. – Pillsy

7

로 정의 할 수 있습니다 반환. 그래서 당신은 그냥 여러 반환 값, 또는 하스켈의 Maybe 유형에 해당하는 부족하기 때문에 티카는 답을 찾기 위해 실패를 신호하는 좋은 방법이 부족

Any[list_List, crit_, default_:"no match"] := 
    With[{maybeMatch = Select[list, crit, 1]}, 
     If[maybeMatch =!= {}, 
      First[maybeMatch], 
      default] 

할 수 있습니다. 내 솔루션은 사용자가 지정할 수있는 기본값을 갖는 것이므로 유효한 대답과 쉽게 구별되는 것을 전달할 수 있습니다.

3

Select 기능은 제공이 내장, 선택 항목의 최대 수를 나타냅니다 세 번째 인수를 통해 :

In[1]:= Select[{1, 2, 3, 4, 5}, OddQ, 1] 
Out[1]= {1} 

없음 일치하는 경우 :

In[2]:= Select[{2, 4}, OddQ, 1] 
Out[2]= {} 

편집 : 죄송합니다, 놓친 nes1983은 이미 이것을 언급했다.

+0

Select의 세 번째 인수에 대한 언급은 nes1983의 대답에서 볼 수 없습니다. 나는 이것이 이것이 받아 들여지는 대답이어야한다고 생각한다. – dreeves

+0

오, 필츠 티를 의미 했나봐. – dreeves

관련 문제