2

少なくとも私が使用したすべての言語で、特定のブール式を記述するときに、特定の過剰な冗長性に関与する必要があります。もっと簡潔に記述できる言語があるかどうか疑問に思っていました。

その方法は次のとおりです。

、、、またはのThingいずれかになる があるかどうかを調べたいと思います。ABCD

Thingが であるか であるAかを確認したいと思いBます。

私がこれを表現する論理的な方法は、

//1:  true if Thing is an A or a B
Thing == (A || B)

それでも、私が知っているすべての言語は、次のように書かれることを期待しています

//2:  true if Thing is an A or a B
Thing == A || Thing == B

1 をサポートする言語はありますか? Thingブール値でない限り、私には問題がないようです。

4

3 に答える 3

2

はい。アイコンはそうです。

簡単な例として、3 または 5 で割り切れる 1000 未満のすべての数の合計を取得する方法を次に示します (Project Euler の最初の問題)。

procedure main ()
    local result
    local n
    result := 0
    every n := 1 to 999 do
        if n % (3 | 5) == 0 then
            result +:= n
    write (result)
end

n % (3 | 5) == 0表現に注意。正確なセマンティクスについては少し曖昧ですが、Icon では、ブール値の概念は他の言語とは異なります。すべての式はジェネレーターであり、合格 (値の生成) または失敗する可能性があります。式で使用するifと、ジェネレーターは、それ自体が通過するか使い果たされるまで反復を続けます。この場合、n % (3 | 5) == 0は別のジェネレータを使用してが 3 または 5 で割り切れる(3 | 5)かどうかをテストするジェネレータです (完全に技術的なことを言うと、これはシンタックス シュガーではありません)。n

同様に、Python (Icon の影響を受けた) では、inステートメントを使用して、複数の要素が等しいかどうかをテストできます。ただし、Icon よりは少し弱いです (上記のモジュロ比較を直接変換することはできませんでした)。あなたの場合は、あなたがThing in (A, B)望むものに正確に変換されます。

于 2013-07-03T19:21:00.677 に答える
1

条件演算子に魔法を追加することなく、その条件を表現する方法は他にもあります。

たとえば、Ruby では次のようになります。

$> thing = "A"
 => "A"
$> ["A","B"].include? thing
 => true 
于 2013-07-03T18:15:53.030 に答える
1

言語に組み込まれた機能を備えた回答を探していることは承知していますが、より多くの問題を解決し、何十年も使用されているため、より効果的であると思われる他の 2 つの手段を次に示します。

プリプロセッサの使用を検討しましたか?

また、Lispのような言語には、言語の一部であるマクロがあります。

于 2013-07-03T19:41:51.150 に答える