PROLOG通过条件获得名称

问题描述 投票:0回答:1

我坚持使用条件或查询来获得学生的姓名,其年龄必须超过“25”,教师必须是“jdoe”。

我想要一个带2个参数的条件(年龄,老师)。如:

?-find(26, jdoe).

我的Prolog代码如下所示:

/*student(name,studnumb,age,sex)*/

student(cax,1234,22,female).
student(sad,7839,26,male).
student(fads,1726,29,male).
student(rafa,1114,25,male).
student(gafrh,6654,36,female).
student(reads,4627,20,male).
student(hyqa,2563,25,female).
student(berat,9258,30,female).

find(S1, S2):-
    S1 > 25,
    S2 == jdoe,
    write(student(, _, S1, _)).

takes(1234,1111).
takes(7839,1111).
takes(1726,1111).
takes(1114,2345).
takes(6654,1111).
takes(4627,4588).
takes(2563,2222).
takes(9258,6534).

teaches(jdoe,1111).
teaches(bbuilder,2345).
teaches(tkailor,6789).
teaches(jdough,4588).
teaches(krain,2222).
teaches(slisterine,6534).

不幸的是,我无法实现正确的查询或有条件地打印超过“25”并且具有“jdoe”作为教师的正确学生姓名组。

prolog
1个回答
0
投票

我想下一个代码。

find(YO, TN):-
  student(SN, IS, SY, SX),
  (var(YO)->true
  ;SY > YO),
  takes(IS, IT),
  teaches(TN,IT),
  writeln([TN,student(SN,IS,SY,SX)]),fail;true.

我尝试下一个测试代码。

main:-  
  find(25,jdoe),
  find(20,krain).
[jdoe,student(sad,7839,26,male)]
[jdoe,student(fads,1726,29,male)]
[jdoe,student(gafrh,6654,36,female)]
[krain,student(hyqa,2563,25,female)]
© www.soinside.com 2019 - 2024. All rights reserved.