2016-05-19 2 views
1

[A,B,C|_] = [1,2,3,4,5,6,7] A = 1 B = 2 C = 3. この結果が期待されます。しかし、私が持っているとき:プロローグ内のパターンマッチングリストのようなもの

行う方法
L = [A,B,C,D] 

L = [1,2,3,4,5,6,7] 
A = 1 
B = 2 
C = 3 
D = 4 

問題は、どれくらいの時間がLか分かりません。私が知っているもの:Lはrightsideリストよりも短く、Lは変数のみを含んでいます。

+1

ここで「L」の意味を「オーバーロード」しているように見えます。だから、「やる方法」という質問が少し不明瞭になっています(あなたは完全な質問を表示していません)。私はあなたが変数のリスト、 'L'を持っていると仮定し、あなたの前面と統一したい別のリスト? M = [1,2,3,4,5,6,7]、L = [A、B、C、D]、append(L、_、M).'は、 'D'。 'L'は任意の長さの変数のリストです。もちろん、 'L'の長さが' M'の長さを超えると、期待通りに失敗します。 – lurker

+0

L = [1,2,3,4,5,6,7]、L = [A、B、C、D | _] ' – gusbro

答えて

0

変数リストの末尾にappend(Vars, _, ExtendedList)と入力してパターンマッチExtendedList = Dataを入力するだけです。契約は、我々が得る:

match_vars(Vars, Data):- 
    append(Vars, _, Data). 

テスト:

2 ?- match_vars([A,B],[1,2,3,4,5]). 
A = 1, 
B = 2. 

3 ?- match_vars([A,B,C,D],[1,2,3,4,5]). 
A = 1, 
B = 2, 
C = 3, 
D = 4. 

4 ?- 

append/3を使用して、既にin the commentsを述べました)。

関連する問題