首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog:解决一个难题

Prolog:解决一个难题
EN

Stack Overflow用户
提问于 2015-01-29 21:08:48
回答 2查看 1.1K关注 0票数 1

我是prolog的新手,我正试图解决以下问题。我很难理解解决问题的逻辑。我知道它类似斑马问题,但我不知道如何接近。任何帮助都将不胜感激。

五名学生在一项教学/教学测验中提出的答案如下。

代码语言:javascript
复制
Teresa: T T F T F
Tim:    F T T T F
Tania:  T F T T F
Tom:    F T T F T
Tony:   T F T F T
  1. 塔尼娅得到的答案比特蕾莎多。
  2. 汤姆比提姆更正确。
  3. 托尼没有得到所有正确的答案,也没有完全搞错。

编写一个Prolog程序quiz(Answer),它断言答案是tf常量的列表,这是对测试的正确答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-30 08:26:58

如果您使用SWI,您可以使用库clpfd来解决这个难题:,我只得到一个解决方案(f,f,t,f,t)。

你有一个解A,B,C,D,E。你用

代码语言:javascript
复制
[A,B,C,D,E] ins 0..1,

例如,您将teresa的所有答案具体化。

代码语言:javascript
复制
teresea([1,1,0,1,0]).
A #= 1 #<==> TA
B #= 1 #<==> TB
.....

计算Tis的和

代码语言:javascript
复制
sum([TA, TB, ...], #= , Steresa),

之后,你对的回答将比特蕾莎得到更多的答案。

代码语言:javascript
复制
Stania #> Steresa

你得到了解决办法

代码语言:javascript
复制
label([A,B,C,D,E]).

希望这能有所帮助

票数 1
EN

Stack Overflow用户

发布于 2015-01-30 03:19:35

像这样的小难题可以通过生成和测试来解决。

代码语言:javascript
复制
solve(L) :-
    % generator
    length(L, 5), maplist(tf, L),

    % Tania got more answers right than Teresa did.
    matches(L, tania, Tania),
    matches(L, teresa, Teresa), Tania > Teresa,
...

tf(t).
tf(f).

teresa(t, t, f, t, f).
tim(f, t, t, t, f).
...

当然,matches(L, tania, Tania)计算的答案是正确的。

但是,我找不到解决办法。托尼,这是唯一的元组,这是它的确切结果。所以,这个条件

托尼没有把所有的答案都找对。

无法解决..。

编辑:我在matches/3中有一个bug,当然有一个解决方案。

编辑好了,CLP(FD)版本可以非常紧凑,同时更通用.

代码语言:javascript
复制
teresa(t, t, f, t, f).
...

matches(L, P, N) :-
    call(P, A,B,C,D,E),
    foldl(eqsum, [A,B,C,D,E], L, 0, N).
eqsum(t,Ls,Acc,N) :-    N #= Acc + (° #<==> Ls #= 1).
eqsum(f,Ls,Acc,N) :-    N #= Acc + (° #<==> Ls #= 0).

solve(L) :-
    length(°L, 5) ins 0..1,
    % Tania got more answers right than Teresa did.
    matches(L, tania, °) #> matches(L, teresa, °),
    % Tom got more right than Tim.
    matches(L, tom, °) #> matches(L, tim, °),
    % Tony did not get all the answers right, nor did he get them all wrong.
    matches(L, tony, °Tony) #> 0, Tony #< 5.

我在这里用了我的提升机

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28224626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档