0

リストにいくつかの数値を追加しようとしています。これらの数値は、X が下限で上限がからXまでの範囲にあり、生成されたこれらの数値をリストに保存します。私はこれを試しました:YY

domains
    list=integer*.

predicates
    nondeterm generate(integer,integer,list).
    nondeterm append(integer,list,list).

clauses
    append(X,[],[X]).   
    generate(0,0,[]).
    generate(X,X,[]) :-
            write("The Upper And Lower Numbers Are The Same\n").
    generate(X,Y,[X|T]) :-
            X<=Y,
            N=X+1,
            A=N+1,
            append(N,T,Z),
            generate(A,Y,Z).

goal
    generate(1,4,Result).   

しかし、目標をテストすると、「解決策はありません」と表示されます。私は何を間違っていますか?ご助力ありがとうございます。

4

1 に答える 1

1

これを試して:

?= findall(X,between(1,4,X),L).
L = [1, 2, 3, 4].

さよなら

PS: between/3 の純粋な実装については、
http ://www.jekejeke.ch/idatab/doclet/blog/docs/05_run/05_frequent/advanced/arith.html を参照してください。

于 2015-12-22T15:52:02.067 に答える