2

Mathematica には、基準を満たすリストの要素を取得する「select any」のようなものがありますか?

4

5 に答える 5

7

最初に一致した要素の後に戻りたい場合は、オプションの 3 番目の引数を に使用しますSelect。これは、返される結果の最大数です。だからあなたはただすることができます

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

Mathematica には、複数の戻り値、またはHaskellのMaybe型と同等のものがないため、答えが見つからなかったことを知らせる優れた方法がありません。私の解決策は、ユーザーが指定できるデフォルト値を持つことです。これにより、有効な回答と簡単に区別できるものを確実に渡すことができます。

于 2009-10-06T23:16:48.947 に答える
3

Select関数は、選択する項目の最大数を示す 3 番目の引数を介して、この組み込みを提供します。

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

一致しない場合:

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

編集:おっと、nes1983がすでにこれを述べていることを見逃しました。

于 2010-06-30T04:31:27.787 に答える
1

あなたは比較的簡単にそれを行うことができScanますReturn

fstp[p_, l_List] := Scan[ p@# && Return@# &, l ]

そう

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

Mathematica に、式を遅延評価するためのオプションがいくつかあればいいのにと思います。Haskell などの遅延言語では、通常どおりに定義できます。

fstp p = head . filter p
于 2009-10-06T22:36:01.867 に答える
1

条件を満たす要素をすべて取得する「Select」があります。そう

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
于 2009-07-24T13:55:31.703 に答える