prolog - 我们如何在 prolog 中表示复杂的整数加法和乘法?
问题描述
我是 Prolog 语言的新手,正在尝试自学。我遇到了一个有趣的问题,它说:
将复整数表示为整数的二元素列表,因此
[2,5]
表示2+5i。
编写 Prolog 谓词cadd/3 cmult/3
表示复杂的整数加法和乘法。因此,例如,
cadd([X1,X2],[Y1,Y2],[Z1,Z2])
当且仅当
Z1=X1+Y1
且成功Z2=X2+Y2
。
请注意,复数乘法不仅仅是复数加法。
我是新手。有人可以帮忙吗,我正在努力自学。非常感谢您的帮助!
注意:这只是为了学习目的!
解决方案
正如作业所说,
:- use_module( library( clpfd)). % in SWI Prolog
cadd([X1,X2],[Y1,Y2],[Z1,Z2]) :-
%% succeeds if and only if Z1=X1+Y1 and Z2=X2+Y2.
Z1 #= X1+Y1,
Z2 #= X2+Y2.
Prolog 中的#=
s 是算术等式约束。=
是象征性的统一。is
是算术赋值/相等检查,但必须在 右边的所有变量is
都已知时使用。#=
自动处理这个。
推荐阅读
- java - Android中的向下钻取饼图
- eclipse - Eclipse:防止“文件搜索”在同一选项卡中打开不同的文件
- java - 难道我们没有任何Java内置方法来查找数字数组的平均值吗?
- apache-kafka - 具有多个主题的 Kafka MQTT 连接器
- javascript - POST 值到另一个应用程序
- arcgis - 我的点绘制在 0 纬度,0 经度
- c# - 使用MediaCapture c#在触发前后记录秒数的圆形缓冲区
- javascript - 在 VueJS 项目中安装 slick carousel
- javascript - 流式传输 html5 画布内容的有效方式?
- docker - 即使在配置 DOCKER_OPTS="iptables=false" 之后,ubuntu 18.04 服务器 ufw 也不会阻塞