0

ネストされたリストに 1 つのリスト要素を追加したい:

predicates  
  append(li,li,li).

clauses 
 append([X|Y],Z,[X|W]):- append(Y,Z,W).
 append([],X,X).  

例えば:

append([ [1],[2],[3] ],[4],A)
Solution: A = [ [1],[2],[3],[4] ]

Turbo Prolog は次のように述べています: タイプエラー。

これどうやってするの?

4

2 に答える 2

1

問題は、ドメインを間違って定義していることと、2 つの異なるドメイン (整数のリストと整数のリスト) を追加していることです。

整数のリストのリストを追加することが必要な場合(例からわかるように)、コードは次のようになります

domains
li = integer*
lili = li*

predicates
  append(lili, lili, lili).

clauses
append([X|Y],Z,[X|W]):- append(Y,Z,W).
append([],X,X).

この例では、2 番目のリストはリスト 2 のリストである必要があり、結果は次のようになります。

append([ [1],[2],[3] ],[[4]],A).
Solution: A = [ [1],[2],[3],[4] ]

2 番目のリストは [4] ではなく [[4]] であることに注意してください。

于 2011-04-29T13:44:32.613 に答える
0

これを試して。

clauses
 append([X|Y],Z,[X|W]):- append(Y,Z,W).
 append([],X,[X]). 

あなたが期待する結果はリストのリストです。したがって、コードが 2 番目の述語にステップインする場合、正しい型を形成する必要があります。コードでは、単純な引数トランザクションでした。正しいことは、それを別のリストにラップして、後で最初の「引数」からの項目を埋めることです。

于 2011-04-29T13:59:20.580 に答える