1

I know it is a vague question, but still: what is it about terms that makes them more appropriate for nesting than lists? Or are lists (internally) a trivial case of nested terms?

(I realize I could "use the source", SWI-Prolog, for example, but a pointer in the right direction would be appreciated)

4

2 に答える 2

1

要素の数が事前にわからない場合は、リストを使用するのが理にかなっています。すべてのエンティティが一定数の要素を持っていることが明らかな場合 (バイナリ ツリーのノードの場合のように)、固定アリティの項を使用すると、リストよりもメモリ効率が高くなります。たとえば、次の構造を考えてみましょう。

node(Name, Left, Right)

これには合計 4 つのメモリ セルが必要です。1 つはファンクタ用、3 つは引数用です。

リスト (この場合[Name, Left, Right]は ) を使用すると、合計で約 2 倍のメモリが必要になります。

'.'(Name, '.'(Left, '.'(Right, []))).

リスト ファンクタ ('.') 用に 3 つのセル、 用に 1つのセル[]、引数用に 3 つのセル。

また、ちょっとしたこと: もちろんご存知のように、リストも用語です。リスト、数、ペアなどではない用語は「構造」と呼ばれることがあります。

于 2013-04-14T10:19:29.453 に答える
0

前述のように、Prolog リストは、'.'/2 と '[]' という 2 つの用語の上に構文糖衣を加えたものにすぎません。詳細については、この回答を参照してください: Prolog でリストを平坦化する

于 2013-04-15T18:00:15.340 に答える