2

Pythonで回路図描画ツールを書こうとしています。すべてのコンポーネントとそのプロパティを保持する辞書に基づいて単純なデータベースを作成しています。また、たとえば、値> 100オームまたはフットプリント= '0402'のすべての抵抗器を選択できる単純なクエリ言語を作成しようとしています

これまでのところ、いくつかの基本的な述語検索を使用して物事を選択し、その後、より複雑なものを結合および交差させることができます。

ただし、純粋に否定的な検索のセマンティクスがどうあるべきかを定義するのに苦労しています。たとえば、次のようなもの

フットプリント!= '0402'

フットプリントが 0402 と等しくないすべてのアイテムを選択する必要があります。しかし、交差のみでこれを行うと、空白の結果が得られます。これを機能させるには、すべてのコンポーネントを選択し、「not 0402」と交差して不要なものを削除する必要があります。

しかし、これは一種のブルート フォースのようであり、怪しげな解決策のように思えます。「本物の」データベースとクエリ言語を使用することに興味がないので、それを提案しないでください。ここで適切な工学的根拠を探していますが、必ずしも問題の回避策ではありません。

この問題は SICP の本である程度カバーされていましたが、私は非常に混乱しました。なぜなら、彼らは継続なども使用していたと思うからです。

否定的なものを選択するための「適切な」使用法を説明してください。これを市販のCADツールで試してみたところ、期待どおりに機能しましたが、最初に物を選択してから不要なものを削除したSQLクエリの例(と思います)を見てきました。

ありがとう
マイケル

4

3 に答える 3

5

適切なデータベースがあれば、もっと幸せになれるでしょう。

Python ディストリビューションに SQLite があります。辞書の代わりにテーブルを定義し、SQL を使用するだけです。

より強力で洗練された機能が必要な場合は、SQLAlchemy (またはSQLObject ) を追加すると、これらの問題に悩まされることはありません。

于 2008-12-30T11:26:39.477 に答える
3

直接否定が機能しない理由は、この「辞書に基づく単純なデータベース」をどのように実装したかによって異なります。さらにいくつかの手がかりを提供する必要があります。

単純な否定一致がPython で機能しない理由はありません。たとえば、次のようになります。

components = [
    { 'name': 'resistor', 'footprint': '0402', },
    { 'name': 'LED', 'footprint': '0100', },
    { 'name': 'speaker', 'footprint': '2000', },
]

[comp for comp in components if comp['footprint'] != '0402']
# [{'footprint': '0100', 'name': 'LED'}, {'footprint': '2000', 'name': 'speaker'}]

一言で言えば、これは辞書に基づく単純なデータベースです。具体的な機能は、実際の実装によって異なります。

これは学習課題であると想定しているため、実際のデータベースとクエリ言語の使用を提案する誘惑に抵抗しています。それは学習運動ですよね?:)

于 2008-12-30T10:58:05.367 に答える
1

S.Lott の言うとおり、実際の DB を使用した方が満足するでしょう。SQLite は非常に軽量で高速であり、使用上の欠点はほとんどありません。

単純でありながら完全なクエリ言語をユーザーに公開する必要がある場合は、JSONPathまたはJSONQueryを確認してください(2 番目は 1 番目のスーパーセットです)。正確な構文は (明らかに) JavaScript 用に考えられています。しかし、それはあなたにいくつかのアイデアを与えるはずです。

また、XPath と XQuery で類似点と相違点を確認してみてください。何が有用で、何が文化固有のものかを理解するのに役立ちます。

于 2008-12-30T12:18:40.573 に答える