2012-03-06 17 views
1

リストに、数値にバインドされた変数Nを追加したいとします。Prologリストに変数を追加する

N = 1. 

append([N], [2,3,4], Z). 

Z = [N,2,3,4]. //Wrong output! 

私は変数ではなく、実際の変数自体の数の一部を追加するにはどうすればよいZ = [1,2,3,4]

を取得したいですか?

答えて

4

私は恐らくPrologには変わったような変数の割り当てはありませんだから、 "ステートメント"

N = 1. 
append([N], [2,3,4], Z). 

は、実際には2つの完全に無関係なクエリを構成しています。幸いにも、あなたが望む効果があなたのクエリを組み合わせることによって達成することができます:あなたは真のグローバル変数が必要

N = 1, append([N], [2,3,4], Z). 

場合は、いつでも動的に定義することやasserta/1を使用することができます。

メモ:今後は、番号を扱うときに=の代わりにisを使用することをお勧めします。

+1

悪魔の詳細です。 ""対 "、"すべての違いを作った。 – CyberShot

+0

@ daniel-lyons:単純な数値であっても、右辺が評価されるので、 '='よりも遅く ''を使用します。明らかに、これは特定のPrologシステムに依存する可能性があり、効果はわずかですが、生のスピードでは統一を使用します。 – twinterer

+0

@twinterer私が「N = 1 + Y」と入力した初心者は、通常追加が必要であるという事実と関連しています。 :) –

2

あなたはどのPrologを使用していますか?私が知っているすべてのプロローグは、最初にN = 1の答えを生成します。これは、Prologが最初にクエリN = 1N = 1で応答したことを明確にするはずですが、最初は少し奇妙に見えるかもしれません。例:GNU:

| ?- N = 1. 

N = 1 

yes 
| ?- 
append([N], [2,3,4], Z). 

Z = [N,2,3,4] 

yes 
関連する問題