首页 > 编程语言 >逻辑编程填词游戏

逻辑编程填词游戏

时间:2024-11-04 11:45:09浏览次数:3  
标签:word 游戏 圆盘 编程 填词 V1 hanoi3 塔座 移动

逻辑编程

接前面

着色应用

让人眼前一亮。能不能解决其他冲突问题呢?

回溯倒水

也有冲突检测,一步一步试探。倒水逻辑跟着色很像。怎么写成逻辑编程代码呢?

递归汉诺塔

费尽心思,网上也没有找到办法,却有解决汉诺塔移动的代码。

代码

move(Start, End, Disk) :-
     write('从'),
     write(Start),    
     write('移动圆盘 '),
     write(Disk),    
     write('到 '),
     write(End),
     nl.

hanoi3(N) :-
    hanoi3(N, '塔座A', '塔座B', '塔座C').

hanoi3(1, A, _, C) :-
    move(A, C, 1).

hanoi3(N, A, B, C) :-
    M is N - 1,          %取出前n-1个盘子
    hanoi3(M, A, C, B),  %将A塔座的前n-1个盘子通过塔座移动到B塔座
    move(A, C, N),       %将A塔座的最大盘子移动到C塔座

hanoi3(M, B, A, C).  	%将B塔座的盘子通过A杆移动到C塔座

从hello world开始

我修改了一下打印,添加打印汉诺塔移动盘的过程。

?-hanoi3(3)
从塔座A移动圆盘 1到 塔座C
从塔座A移动圆盘 2到 塔座B
从塔座C移动圆盘 1到 塔座B
从塔座A移动圆盘 3到 塔座C
从塔座B移动圆盘 1到 塔座A
从塔座B移动圆盘 2到 塔座C
从塔座A移动圆盘 1到 塔座C
1true
Next      10       100     1,000     Stop

但是,比C或Python代码长太多了,这不是逻辑编程应该有的样子。看填词游戏解决得多好,还是顺着它的思路学习吧。

填词游戏

把astante , astoria , baratto , cobalto , pistola , statale六个法语单词,交叉填到三横三竖的格子里。用C或Python要很多代码。

题目

Exercise 2.4 Here are six Italian words:

astante , astoria , baratto , cobalto , pistola , statale .

They are to be arranged, crossword puzzle fashion, in the following grid:

在这里插入图片描述

The following knowledge base represents a lexicon containing these words:

word(astante, a,s,t,a,n,t,e).
word(astoria, a,s,t,o,r,i,a).
word(baratto, b,a,r,a,t,t,o).
word(cobalto, c,o,b,a,l,t,o).
word(pistola, p,i,s,t,o,l,a).
word(statale, s,t,a,t,a,l,e).
Write a predicate crossword/6 that tells us how to fill in the grid. The first three arguments should be the vertical words from left to right, and the last three arguments the horizontal words from top to bottom.

答案

w o r d ( V 1 , , H 1 V 1 , , H 2 V 1 , , H 3 V 1 , ) , word(V1,_,H1V1,_,H2V1,_,H3V1,_), word(V1,,​H1V1,,​H2V1,,​H3V1,)​,大概意思:V1要真(存在),题干里六个word里的某一个;_忽略第一个字母;H1V1,H1V1都要包含的字母。

crossword(V1, V2, V3, H1, H2, H3) :-
word(V1,_,H1V1,_,H2V1,_,H3V1,_),
word(V2,_,H1V2,_,H2V2,_,H3V2,_),
word(V3,_,H1V3,_,H2V3,_,H3V3,_),
word(H1,_,H1V1,_,H1V2,_,H1V3,_),
word(H2,_,H2V1,_,H2V2,_,H2V3,_),
word(H3,_,H3V1,_,H3V2,_,H3V3,_),
    H1 \= V1, H2 \= V2, H3 \= V3.

验证

?-crossword(V1, V2, V3, H1, H2, H3).
H1 = astoria,
H2 = baratto,
H3 = statale,
V1 = astante,
V2 = cobalto,
V3 = pistola

也许只能这样一点一点的积累了。坦诚地表达,灵魂的拷问。

后话

like(Prolog).%喜欢逻辑编程 
like(Python).
hate(C).%不喜欢C语音
hard(Prolog). %好难学
hard(C).
good(Prolog). %但是个好语言
good(Python).
good(C).
not(P) :- P, !, fail ; true.
get(X):- %我能学会吗? 
    like(X),good(X),not(hate(x)).

?- get(C). %能搞定C语音吗? 
false
?- get(Python).
true
?- get(Prolog).
??????

我能学会逻辑编程吗?

标签:word,游戏,圆盘,编程,填词,V1,hanoi3,塔座,移动
From: https://blog.csdn.net/denghai_csdn/article/details/143476214

相关文章

  • 计算机存储单元bit。不同编程语言类型差异。
    计算机存储单元bit大部分计算机最小内存操作单元是字节,JE不同编程语言类型差异JEDRAM标准DQ位宽也经常按8bits为单位。英文字母ASCII码虽然可以优化为7位,但7不是一个计算机的好数字,按8位算是最优空间。当然,CPU也有......
  • 硬币游戏赢家 | 动态规划
    描述A和B两人玩硬币游戏。开始共有n个硬币。给定两个数字x和y。在每一步中玩家可以选择x、y或1个硬币。A总是开始比赛。选择最后一枚硬币的玩家获胜。对于给定的n值,假设游戏双方都会按最优的方式选择硬币,判断A是否能赢得游戏。用动态规划求解该问题。输入输入一个整数t表示......
  • 不懂编程技术能学软件开发吗?学软件开发如何开始呢?
    在当今数字化时代,软件开发已经成为一项重要的技能。许多人对学习软件开发感兴趣,但往往担心自己是否具备足够的编程技术。本文将探讨不懂编程技术的人是否能够学习软件开发,并提供一些建议和步骤,帮助他们开始学习软件开发。第一部分:不懂编程技术能否学习软件开发?编程技术的基础......
  • Python编程风格:使用语义更加明确的方法
    在软件开发中,编程风格是一个至关重要的方面,它不仅影响代码的可读性和可维护性,还直接关系到软件的质量和开发效率。在Python中,编程风格尤其重要,因为Python的设计哲学强调代码的可读性和简洁性。本文将探讨如何使用语义更加明确的方法来提升Python代码的可读性和可维护性,并提供具......
  • 【花雕学编程】Arduino RTOS 之时间片轮转调度
    Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用ArduinoIDE(集成开发环境)来编写、......
  • 手游大佬是怎么推广宣传自己游戏的
    1.手游市场的现状与竞争激烈程度2.推广宣传在手游成功中的关键作用3.文章目的:揭秘手游大佬的推广策略二、精准定位与市场分析1.确定目标用户群体  -用户画像的构建  -用户需求的深入分析2.市场调研与竞品分析  -行业趋势的把握  -竞争对手的推......
  • 2024-11-03:得到更多分数的最少关卡数目。用go语言,Alice 和 Bob 正在进行一个有 n 个关
    2024-11-03:得到更多分数的最少关卡数目。用go语言,Alice和Bob正在进行一个有n个关卡的游戏,其中每个关卡要么是困难模式(possible[i]==0),要么是简单模式(possible[i]==1)。玩家在游戏中获得分数的规则如下:通过简单模式的关卡可得1分,而遇到困难模式的关卡将扣除1分。Alice从......
  • Linux系统编程IPC通信之---守护进程讲解(很重要)
    绪论首先在正式介绍守护进程之前,这里先给大家介绍一下进程组和会话。进程组一组相关进程的集合,所有进程的标识符相同.会话一组相关进程组的集合,一个会话中的所有进程共享单个控制终端.在任意时刻,会话中的其实中一个进程组会成为终端的前台进程组.其他进程组会成为......