는, 문제는 귀하의 목록에있는 하나 개의 요소가있는 경우는 0을 반환 courseAvg([], 0)
를 호출하고 그냥 Mark
을 반환해야하면서 2
와 Mark+0
을 분할한다는 것입니다.
추가는 IF 조건 :
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.
. 당신이 원하는 경우 평균 지점 교체 떠있는 : div(Temp,2)
/(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