运算实战题

算数运算

  • 最美公式长廊
  • 5.1 Arithmetic in Prolog
  • 实战一
    • 验证
  • 括号不能乱加
    • 验证
    • |回头
    • 变量也可以表示列表
  • 再叙递归
  • 重点

最美公式长廊

里面有些数学公式,大都做了图形化展示。算数无处不在,当然缺不了逻辑编程。

在这里插入图片描述深圳人才公园最美公式长廊

5.1 Arithmetic in Prolog

可以进行基本的整数运算。主要是用整数表示前面讲的表的长度。

实战一

参照列表求最大值,实现求列表最小值。

addone([],[]).
addone([X|XT],[Y|YT]):-
    Y is X + 1,addone(XT,YT).
accMax([H|T],A,Max) :-
   H > A,
   accMax(T,H,Max).
accMax([H|T],A,Max) :-
   H =< A,
   accMax(T,A,Max).
accMax([],A,A).

max(List,Max) :-
     List = [H|_],
     accMax(List,H,Max).

accMin([H|T],A,Max) :-
   H < A,
   accMin(T,H,Max).
accMin([H|T],A,Max) :-
   H >= A,
   accMin(T,A,Max).
accMin([],A,A).

min(List,Min) :-
     List = [H|_],
     accMin(List,H,Min).

改一下大小符号,单词Max改成Min就可以了。

验证

min([-11,-2,-7,-4,-12],X).
X
-12 1
false

括号不能乱加

第二题列表里各项同时都乘以一个数。

scalarMult(_,[],[]).
scalarMult(Z,[X|TX],[Y|TY]):-
    Y is X*Z,scalarMult(Z,TX,TY).%多加了括号不行

验证

scalarMult(3,[2,7,4],Result).
Result
[6, 21, 12] 1
false

Y is XZ,scalarMult(Z,TX,TY).开始写成了Y is XZ,scalarMult(Z,[TX],[TY])。想到TX,TY也是列表,列表就应该加中括号。这是错误的想法。我在前面逻辑的空无里还认为它是列表分头尾后后面的元组项。

|回头

member(X,[1|2,3,4]).试一下这种写法,直接报错了。
Syntax error: Unexpected comma or bar in rest of list (in_http_request)
前面列表的练习里正好有这样的例子。
改成这样就可以了。
member(X,[1|[2,3,4]]).
X
1 1
2 2
3 3
4

变量也可以表示列表

也只能跟自己这样解释了,看前面抄的第一题求最小值人家也是这样写的。

再叙递归

求列表各项相乘的总和。
第三行第四行不能写反了。
dot([],[],0).
dot([X|TX],[Y|TY],Result):-
dot(TX,TY,T),
Result is(XY + T).
验证回答是32.
看调试里T跟Result是不一样的内存了。一般程序开发语言都是一个变量写到底。这也许才是递归应该的写法。
/

Call:dot([2, 5, 6],[3, 4, 1],_5406)
Call:dot([5, 6],[4, 1],_1196)
Call:dot([6],[1],_1198)
Call:dot([],[],_1200)
Exit:dot([],[],0)
Call:_1192 is 61+0
Exit:6 is 6
1+0
Exit:dot([6],[1],6)
Call:_1190 is 54+6
Exit:26 is 5
4+6
Exit:dot([5, 6],[4, 1],26)
Call:_978 is 23+26
Exit:32 is 2
3+26
Exit:dot([2, 5, 6],[3, 4, 1],32)
*/

重点

失业了,求职中!能有口饭吃将不胜感激。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值