問題タブ [ambiguity]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Pythonでの数値の落とし穴、「どのくらい深いですか?」
私はかなり環境に配慮したプログラマーであり、現在Pythonを学んでいます。私は「コンピュータ科学者のように考えることを学ぶ」(クラスとメソッド)の第17章までですが、完全には理解できない方法で失敗した最初のdoctestを書いたばかりです。
の2番目のdoctestは__init__
失敗し、4.7ではなく4.7000000000000002を返します。ただし、「print」ステートメントを使用してdoctestを次のように書き直すと、次のようになります。
正しく動作します。
そこで、Pythonがどのようにfloatを格納するかを読みました。そして、10進数のバイナリ表現のために、不一致の理由は、Pythonが4.7を1と0の文字列として格納するためです。 。
しかし、私が理解していないのは、「point.x」を呼び出すと4.7000000000000002が返され、「printpoint.x」を呼び出すと4.7が返される理由です。他にどのような状況で、Pythonは「印刷」の場合と同じように丸めることを選択しますか?この丸めはどのように機能しますか?これらの有効数字の末尾は、プログラミングのエラーにつながる可能性がありますか(明らかに、doctestの失敗は別として)?丸めに注意を払わないと、危険なあいまいさが生じる可能性がありますか?
これは10進数のバイナリ表現に関係しているので、これは実際には一般的なCSの問題であり、Pythonに固有の問題ではないと確信していますが、今私が本当に知っておく必要があるのは、具体的にはPythonプログラマー、関連する問題やバグの蔓延を回避します。
また、ボーナスポイントについては、「a = 4.7」のような行によってアクティブ化されるデフォルト以外に、Pythonが浮動小数点数を格納できる他の方法はありますか?Decimalパッケージがあることは知っていますが、それがどのように機能するかは完全にはわかりません。正直なところ、この動的型付けのすべてが私を混乱させることがあります。
編集: Python 2.6を使用していることを指定する必要があります(ある時点でNumPyとBiopythonを使用したい)
c++ - 予想される動作は何ですか?
以下は、純粋に学術的に発明されたクラス階層です。
「X」は「D」のあいまいなベースであるため、X::f2 の使用宣言はあいまいであると予想していました (X の可視性とアクセシビリティ)。ただし、g++ (ideone.com) では問題なくコンパイルされます。
Online Comeau で確認したところ、期待どおりに X::f2 の宣言を使用するとエラーが発生します。ただし、Z::X::f3 の宣言を使用する場合にもあいまいさが生じます。
では、期待される動作は何ですか?
編集1:
基準の適切なセクションへの参照が役に立ちます。
編集2:
VS 2010 で確認したところ、using 宣言 X::f2 のみに異論があります。ただし、「X」のあいまいさについてではありません (gcc と Comeau の場合のように)。「エラー C2876: 'X': すべてのオーバーロードにアクセスできるわけではありません」についてです。
編集3:
ここでは、(意図的に) 宣言を使用する際の型に関する問題を作成しようとしました。Gcc はまだこれをうまくコンパイルしており、VS2010 も同様です。Comeau は、あいまいな型の「トラブル」について、(予想どおり) エラーを返します。最初のクエリの説明を見ると、GCC と VS2010 が間違っているようです。あれは正しいですか?
c# - 同等の暗黙の演算子:なぜそれらは合法ですか?
アップデート!
以下のC#仕様の一部の私の分析を参照してください。この質問で説明している動作は実際には仕様に違反しているように見えるので、何かが足りないに違いないと思います。
アップデート2!
OK、さらに考えてみると、いくつかのコメントに基づいて、私は今何が起こっているのか理解していると思います。仕様の「ソースタイプ」という言葉は、変換元のタイプを指します。つまり、Type2
以下の例では、コンパイラが候補を定義された2つの演算子に絞り込むことができることを意味します(Type2
ソースタイプであるため)。両方のための)。ただし、これ以上選択肢を絞り込むことはできません。したがって、仕様のキーワード(この質問に適用される)は「ソースタイプ」です。これは、以前は「タイプの宣言」を意味すると誤解していました(私は思います)。
元の質問
これらのタイプを定義したとします。
次に、私がこれを行うと言います:
implicit
どの演算子を使用すべきかが明確でないため、これは明らかにあいまいです。私の質問は-このあいまいさを解決する方法がわからないので(どのバージョンが必要かを明確にするために明示的なキャストを実行できるわけではありません)、それでも上記のクラス定義はコンパイルされます-なぜコンパイラは許可するのでしょうかそれらの一致するimplicit
演算子はまったく?
解剖
OK、これを理解するために、Hans Passantが引用したC#仕様の抜粋を見ていきます。
ユーザー定義の変換演算子が考慮されるタイプのセットDを見つけます。このセットは、S(Sがクラスまたは構造体の場合)、Sの基本クラス(Sがクラスの場合)、およびT(Tがクラスまたは構造体の場合)で構成されます。
(S)から (T )に変換しています。したがって、ここでDには、例の3つのタイプすべてが含まれているようです:(これはSの基本クラスであるため)、(T)、および(S)。Type2
Type1
Type0
Type1
Type2
該当するユーザー定義の変換演算子Uのセットを見つけます。このセットは、Sを含む型からTを含む型に変換する、Dのクラスまたは構造体によって宣言されたユーザー定義の暗黙的な変換演算子で構成されます。Uが空の場合、変換は未定義であり、コンパイル時エラーが発生します。
さて、これらの条件を満たす2つの演算子があります。で宣言されたバージョンは、がDであり、(明らかにSを含む)から(明らかにTを含む)に変換されるType1
ため、要件を満たしています。のバージョンも、まったく同じ理由で要件を満たしています。したがって、Uにはこれらの演算子の両方が含まれます。Type1
Type2
Type1
Type2
最後に、 Uの演算子の最も具体的な「ソースタイプ」SXを見つけることに関して:
Uの演算子のいずれかがSから変換される場合、SXはSです。
これで、Uの両方の演算子がSから変換されます。これにより、 SXがSであることがわかります。
Type2
これは、そのバージョンを使用する必要があるという意味ではありませんか?
ちょっと待って!よくわかりません!
演算子のバージョンのみを定義することはできませんでしType1
た。その場合、残りの候補はType1
のバージョンのみになりますが、仕様によればSXは次のようになりType2
ますか?これは、仕様で不可能なことが義務付けられている可能性のあるシナリオのようです(つまり、で宣言された変換はType2
、実際には存在しない場合に使用する必要があります)。
ambiguity - Dでamb演算子を一般的に実装することは可能ですか?
Dでamb演算子を一般的に実装することは可能ですか?
http://www.haskell.org/haskellwiki/Amb
http://www.randomhacks.net/articles/2005/10/11/amb-operator
私が考えているのは、次のようなものです。
最後の 2 つの例では、~ と .length を amb 'context' (モナド?) に 'lifting' する必要があります。最初の 2 つの例では、演算子は AMB のコンテンツに適用する必要があります。
簡単に試してみましたが、ラップされた型の演算子/メソッド/プロパティ (この例では *、~、および .length) を持ち上げようとすると問題が発生します。これはDでどのように行うべきですか?
ありがとう、
クリス。
c++ - あいまいな構文
main 関数の右中括弧の前の最後の 2 行でエラーが発生するのはなぜですか? 式 MYINT() が異なるコンテキストで異なる方法で扱われるのはなぜですか? 標準のリファレンスはどれも役に立ちます。
c++ - 匿名の名前空間のあいまいさ
次のスニペットについて考えてみます。
この場合、匿名の名前空間内で何かを参照するにはどうすればよいですか?
grammar - あいまいなBNFを見つける
あいまいなBNFを修正する割り当てがありますが、完全に失われています。私はこれが本当のプログラミングの質問ではないことを知っています、そしてそれがこれらのボードにとって適切な質問でないならば、私は喜んでそれを削除します。BNFについてもっと学ぶことができる良いサイトはありますか?私が扱っているのはかなり単純なようですが、BNFに関する例や良い説明は見つかりません。あいまいな構文解析ツリーやその他の種類の文法を見つけた経験はありますが、これには完全に迷っています。
学校の課題なので、問題のBNFを投稿する必要があるかどうかはわかりませんが、誰かが私の質問を攻撃する方法をよりよく理解するために調べることができる良いサイトを知っている場合。どこから始めたらいいのかわからない。
antlr - この文法のどこが間違っていますか? (ANTLRワークス1.4)
ANTLRWorks 1.4 で次のコードを記述しました。
入力で実行すると:
MismatchedTokenException(5 != 15) が発生します。
そして入力で:
NoViableAltException が発生します。
それはうまくいきますが
私はこれに慣れていませんが、あいまいさがあるようですか?それとも私のANTLRの使い方が間違っているのでしょうか?
c++ - 浮動小数点と整数のあいまいさ
整数値と浮動小数点値をとることができるはずの関数(およびコンストラクター)があります。実際、私はそれがint64_t
またはを取りたいlong double
ので、私が欲しいのは、
ただし、これを実行して試してみると、コンパイラはからへの変換があいまいであるとFoo f = 1;
文句を言います。わかりましたが、最初のコンストラクターを変更して、そのようなあいまいさはありません。なぜこれが当てはまるのか、誰かが私に説明できますか?int
Foo
int32_t
ajax - 同じ SharePoint Web アプリケーションで両方のバージョンの Ajax (1.0.61025 と 3.5.0.0) を使用する
私は SharePoint Web アプリケーションに取り組んでいます。SharePoint ページに Web パーツを追加できるので、A が Ajax 拡張機能 1.0 を使用し、B が 3.5 バージョンを使用する 2 つの Web パーツ A と B を追加しました。
Web アプリで Ajax を有効にすると、dll System.Web.Extensions (1.0.61025.0 & 3.5.0.0) の両方のバージョンの web.config エントリが取得されるため、あいまいなエラーが発生します。
アプリケーションを両方のバージョンで動作させるにはどうすればよいですか? 異なるベンダーから Web パーツを購入した可能性があるため、バージョンを統一することはできません。
これに対する解決策は何ですか?Ajax 拡張機能の両方のバージョンが共存するにはどうすればよいでしょうか?