あなたは、ほぼ正しいです、問題はあなたのリストには一つの要素を持っているとき、それは0を返し、それだけでMark
を返す必要がありながら、それは2
でMark+0
を分割courseAvg([], 0)
を呼び出すことです。条件ならば
追加:
courseAvg([], 0).
courseAvg([_+_+Mark|Tail], Avg) :-
courseAvg(Tail, Number),
(Number =\= 0 ->
Temp is Number + Mark,
Avg is div(Temp,2);
Avg is Mark).
(またはあなたがベースケースとして一つの要素を返すマークの付いたリストを持っている可能性が)。 例:あなたはdiv/2
を使用しているため、それが唯一の整数値を返します上記のあなたが見ることができるように
?- courseAvg([9,9,9],N).
N = 9.
?- courseAvg([9,9,8],N).
N = 8.
。あなたはAVGが浮動小数点になりたい場合は、交換してください:/(Temp,2)
とdiv(Temp,2)
を:
?- courseAvg([9,9,8],N).
N = 8.75.
?- courseAvg([9,8,8],N).
N = 8.5.
?- courseAvg([9,7,8],N).
N = 8.25.
ありがとう、あなたの答えはすばらしく働いた。私は自分のデータ構造に合わせていくつかのワイルドカードを使用したことに注意します。つまり、courseAvg([_ + _ Mark | Tail]、Avg):-)これは全体的なロジックには影響しません。 –
助けてくれてうれしい!!はい、私は構造に気づき、テストのために削除しました。私はコードに戻します... – coder