私は面積を計算する次の関数を持っています。面積計算正接円周 - プロローグ
3つのパラメータを受け取ります。最初はnの場合を表し、2番目は周囲のラジオを表し、3番目の場合は結果を返します。
第1入力が1より大きい場合、それは機能しません。
この私のコード:
as(1, [X], A) :-
A is (sqrt(3.0) * (X*X)) - (3.14 * (X*X))/2.
as(N, [H|_T], A) :-
A is (sqrt(3.0) * (H*H)) - (3.14 * (H*H))/2,
N1 is N-1,
as(N1-1, T, A).
それが動作するはずです方法の例は次のとおりです。
?- as(4, [1,1,1,1], R).
R = 0.162050807568877130000 ;
R = 0.162050807568877130000 ;
R = 0.162050807568877130000 ;
R = 0.162050807568877130000.
あなたは私を助けることができれば、私は感謝される...
述語は** **小文字で始まる必要があります。 –
おそらくあなたの再帰呼び出しは、 'as(N1-1、T、A)'の代わりに 'as(N1、T、A)'になりたいでしょう。 'as/3'の第一引数の目的は何ですか?それが空になるまでリストを処理できるようです。私はあなたがそのケースでは最初の句全体を削除することができたと思います。なぜなら、リストが空になると何も一致しないからです。 –
2番目の引数リストの長さに数字の重複情報がありませんか? –