首页 > 解决方案 > 我们如何在 prolog 中表示复杂的整数加法和乘法?

问题描述

我是 Prolog 语言的新手,正在尝试自学。我遇到了一个有趣的问题,它说:

将复整数表示为整数的二元素列表,因此[2,5]表示2+5i
编写 Prolog 谓词

 cadd/3
 cmult/3

表示复杂的整数加法和乘法。因此,例如,

 cadd([X1,X2],[Y1,Y2],[Z1,Z2])

当且仅当Z1=X1+Y1且成功Z2=X2+Y2
请注意,复数乘法不仅仅是复数加法。

我是新手。有人可以帮忙吗,我正在努力自学。非常感谢您的帮助!

注意:这只是为了学习目的!

标签: prolog

解决方案


正如作业所说,

:- 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都已知时使用。#=自动处理这个。


推荐阅读