繁体   English   中英

Prolog-列表的增量值

[英]Prolog - increment value of list

我是Prolog的新手,基本上在柜台方面遇到一些困难。

此代码有效:

listProf(L1) :-
   findall((LastName,FirstName,Id), professor(Id,LastName,FirstName), L1).

L1是一个列表,其格式如下: L1(LastName,FirstName, Id)

所以现在我有一个列表L1 我需要在此列表之后创建一个新列表,其格式为: L2(LastName, FistName, NumberOfCredits)

如果L1中的ID与以下ID中的ID相匹配,则NumberOfCredits应该增加3: groupeCours( _, _, _, _,Id,( _, _))

我想到了这一点,但显然行不通:

profNbcredits(L) :-
   findall((LastName,FirstName,NbCredits),
      (  listProf([(_,_,Id)]),
         groupeCours( _, _, _, _,Id,( _, _)),
         NbCredits is NbCredits +3
      ),
      L).

我知道“ NbCredits是NbCredits +3”在逻辑编程中不起作用,并且我需要两个“变量”,但是我无法设法找到一种方法。 另外,我不知道的:listProf([(,,ID)])。 与此相关,我试图在列表listProf中获取每个三胞胎的ID。

你有什么想法?

有点“数据库”:

groupeCours('INF1110', 20, 32003, 100, 'TREJ4',('Thursday',1)).
groupeCours('INF1110', 30, 32003, 100, 'PASB1',('Wednesday',2)).
groupeCours('INF1130', 10, 32003, 100, 'PASB1',('Monday',2)).

professor('TREJ4', 'Tremblay', 'Jean').
professor('DEVL2', 'De Vinci', 'Leonard').
professor('PASB1', 'Pascal', 'Blaise').
professor('GOLA1', 'Goldberg', 'Adele').

我认为您不需要listProf/1即可完成任务。 同样,您从任何地方都不能以0信用点开始( 0不会在代码中的任何地方出现)。

尽管您的问题永远不会直截了当地说您要做什么以及假设是什么,但是看来您最终是在尝试确定每位教授提供的总学分,并且假设只是每个课程都是固定为3个学分。 我本来希望有一个数据库数据库,该数据库指示可以申请多少学分,但这似乎并不是您所拥有的。

然后,从提供给定教授ID的总学分的谓词开始,可能会更有意义:

professor_total_credits(ProfId, TotalCredits) :-
    findall(3, groupeCours(_, _, _, _, ProfId, _), Credits),
    sum_list(Credits, TotalCredits).

然后,您可以列出所有这些:

professors_total_credits(ProfTotalCredits) :-
    findall((ProfLast, ProfFirst, Credits),
            (professor(Id, ProfLast, ProfFirst),
             professor_total_credits(Id, Credits)),
            ProfTotalCredits).

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM