2

gnu Prologでは、CollegeAdviserプログラムですべての大学の単位の合計を収集しようとしています。

現在、次のようなクレジット数を返します。

| ?- totalCredits(joe, X).

X = 3 ? ;

X = 3 ? ;

X = 3 ? ;

X = 1 ? ;

X = 3 ? ;

X = 3 ? ;

no

そして、これはそのコードサンプルです:

totalCredits(Student, Credits) :-
    class(Class, _, _),
    creditFor(Student, Class, _),
    class(Class, _, Credits).

だから私の質問は、どうすればそれらすべての結果を要約できますか?私はプロローグにまったく慣れておらず、以前は関数型言語しか使用したことがないので、何かが完全に欠けているのかもしれません。

4

2 に答える 2

0

を使用findallしてすべてのクレジットを取得し、それらを合計します。

findall(C, creditFor(Student, _, C), Credits),
sum(Credits, Sum).

creditFor(私はあなたの述語の意味を正しく理解したと思います。)

ここに、sum私があなたに任せる総和述語があります。それはその機能的な対応物と非常に似ているはずです。

于 2012-10-23T21:25:39.540 に答える
0

クレジットのリストを収集し、それを合計することができます。

totalCredits(Student, Total) :-
  findall(Credits, creditFor(Student, _Class, Credits), ListOfCredits),
  sum_list(ListOfCredits, Total).

コメントの後に編集、修正:関係に参加してください!

totalCredits(Student, Total) :-
  findall(Credits,
    (creditFor(Student, Class, _),
     class(Class, _, Credits)), ListOfCredits),
  sum_list(ListOfCredits, Total).
于 2012-10-23T21:29:51.760 に答える