C とか Java だったらデータは構造体やクラスとして定義するわけで、関数やメソッドとしてなんか定義しない。
データと処理を明確に区別するパラダイムなの。
一方 Prolog は全部節定義でやるから、そこにぶつけた話なんでしょ。

>>533 の方式は、プログラマが読めば理解できる定義だけど、実行時にプログラムから使うのは面倒そうかな。
何番目が address なのかは取得できても、そこから簡単にクエリー組み立てられないよね。


person(name, 1, yamada).
person(address, 1, tokyo).

みたいな定義はどうかな。
これだとテーブル上での順番とかを考える必要はなくて、例えば address が tokyo の人を取得するのを

person(address, Id, tokyo)

みたいに書ける。