PROLOG通过条件获得名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PROLOG通过条件获得名称相关的知识,希望对你有一定的参考价值。

我坚持使用条件或查询来获得学生的姓名,其年龄必须超过“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”作为教师的正确学生姓名组。

答案

我想下一个代码。

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)]

以上是关于PROLOG通过条件获得名称的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法通过 Prolog 获得 Ship Puzzle 的答案?

带有先决条件的 Prolog 路径查找

Prolog - 从一副牌中获得 X 个可能的牌

gerrit prolog提交规则条件检查

无法使用 GNU-Emacs 在 SWI-Prolog 上编辑“Prolog 程序名称”(尝试设置劣质 Prolog 进程)

搜索所有有条件的父亲在Prolog