0

a) argl でインスタンス化されたリストのリストを取り、サブリストのヘッドのリストを arg2 として計算する述語 head/2 ( argl , arg2) を書きます。例えば:

?- heads([[3, 8], [9], [1, 2, 3], [a, b, c]], L).    
L = [3, 9, l, a]

b) 2 つの入力を受け取るように mply を定義します。整数および整数のリスト。結果は、リスト内の各整数に入力整数を掛けて形成された整数のリストです。例えば:

?- mply(5, [1, 2, 3], X).    
X = [5, 10, 15]

c) 算術式 Expr の値 (Value) を計算する compute (Expr, Value) という Prolog プログラムを作成します。要件は次のとおりです。 • 算術式は、単一の数値または [Exprl, Operator, Expr2] の形式のリストです。 • Exprl および Expr2 は算術式です。 • 演算子は、アトム プラスまたはアトム マイナスです。プログラムは、次のクエリに対して機能するはずです。

?- compute(7, Val).
Val = 7

?- compute([2,plus,[9,minus,1]], Val).
Val = 10

私はプロローグについて改訂を行っており、助けていただきありがとうございます。

4

2 に答える 2

1

a) 空リストの先頭を計算するとはどういう意味ですか? 述語は失敗するはずだと思います:

:- use_module(ライブラリ(ラムダ) ).

list_heads(XXs, Xs) :-
   maplist(\[X|_]^X^true,XXs, Xs).

mply(F、X、Z) :-
   maplist(F+\X^Z^(Z は X*F), Xs, Zs)。

計算 ([私]、ヴァル) :-
   ヴァルは私です。
compute([E1,plus,E2],Val) :- compute(E1,V1), compute(E2,V2), Val は V1+V2 です。
compute([E1,minus,E2],Val) :- compute(E1,V1), compute(E2,V2), Val は V1-V2 です。

compute([_],V)が発行することに注意してくださいinstantiation_error。これは、黙って失敗するよりもはるかに優れたアイデアです。

于 2014-03-03T19:38:17.417 に答える