算数 上机操作

转载自:https://mp.weixin.qq.com/s/1my79TnLOc0p0BWoSYlc7A

1 Prolog中的算术

?- 8 is 6+2.

true.

 

?- -2 is 6-8.

true.

 

?- 3 is 6/2.

true.

 

?- 1 is mod(7,2).

true.

 

?- X is 6+2.

X = 8.

 

?- X is 6*2.

X = 12.

 

?- R is mod(7,2).

R = 1.

 

?- [user].

|: add_3_and_double(X,Y):- Y is (X+3)*2.

|: ^D% user://11 compiled 0.00 sec, 1 clauses

true.

 

?- add_3_and_double(1,X).

X = 8.

 

?- add_3_and_double(2,X).

X = 10.

 

?- X is 3+2*4.

X = 11.

 

?- X = 2+3.

X = 2+3.

 

?- 3+2*5 = X.

X = 3+2*5.

 

?- X = 3+2*5.

X = 3+2*5.

 

?- X is 6+2.

X = 8.

 

?- 6+2 is X.

ERROR: Arguments are not sufficiently instantiated

ERROR: In:

ERROR:   [10] 6+2 is _7854

ERROR:    [9] <user>

 

?- listing(add_3_and_double).

add_3_and_double(B, A) :-

    A is (B+3)*2.

 

true.

 

?-  add_3_and_double(X,12).

ERROR: Arguments are not sufficiently instantiated

ERROR: In:

ERROR:   [11] 12 is (_10588+3)*2

ERROR:    [9] <user>

ERROR: 

ERROR: Note: some frames are missing due to last-call optimization.

ERROR: Re-run your program in debug mode (:- debug.) to get more detail.

?- 

 

 

?- X is +(3,2).

X = 5.

 

?- is(X,+(3,2)).

X = 5.

 

算术和表

 

?- [user].

|: len([], 0).

|: len([_|T],N):- len(T,X), N is X+1.

|: ^D% user://12 compiled 0.00 sec, 2 clauses

true.

 

?-  len([a,b,c,d,e,[a,b],g],X).

X = 7.

 

?- [user].

|: accLen([_|T],A,L):- Anew is A+1,accLen(T,Anew,L).

|: accLen([],A,A).

|: ^D% user://13 compiled 0.00 sec, 2 clauses

true.

 

?- trace.

true.

 

[trace]  ?- accLen([a,b,c],0,L).

   Call: (10) accLen([a, b, c], 0, _6462) ? creep

   Call: (11) _6746 is 0+1 ? creep

   Exit: (11) 1 is 0+1 ? creep

   Call: (11) accLen([b, c], 1, _6462) ? creep

   Call: (12) _6752 is 1+1 ? creep

   Exit: (12) 2 is 1+1 ? creep

   Call: (12) accLen([c], 2, _6462) ? creep

   Call: (13) _6758 is 2+1 ? creep

   Exit: (13) 3 is 2+1 ? creep

   Call: (13) accLen([], 3, _6462) ? creep

   Exit: (13) accLen([], 3, 3) ? creep

   Exit: (12) accLen([c], 2, 3) ? creep

   Exit: (11) accLen([b, c], 1, 3) ? creep

   Exit: (10) accLen([a, b, c], 0, 3) ? creep

L = 3.

 

[trace]  ?- notrace.

true.

 

[debug]  ?- nodebug.

true.

 

?- [user].

|: leng(List,Length):- accLen(List,0,Length).

|: ^D% user://1 compiled 0.00 sec, 5 clauses

true.

 

?- trace.

true.

 

[trace]  ?- 

|    leng([a,b,c],L).

   Call: (10) leng([a, b, c], _11568) ? creep

   Call: (11) accLen([a, b, c], 0, _11568) ? creep

   Call: (12) _11832 is 0+1 ? creep

   Exit: (12) 1 is 0+1 ? creep

   Call: (12) accLen([b, c], 1, _11568) ? creep

   Call: (13) _11838 is 1+1 ? creep

   Exit: (13) 2 is 1+1 ? creep

   Call: (13) accLen([c], 2, _11568) ? creep

   Call: (14) _11844 is 2+1 ? creep

   Exit: (14) 3 is 2+1 ? creep

   Call: (14) accLen([], 3, _11568) ? creep

   Exit: (14) accLen([], 3, 3) ? creep

   Exit: (13) accLen([c], 2, 3) ? creep

   Exit: (12) accLen([b, c], 1, 3) ? creep

   Exit: (11) accLen([a, b, c], 0, 3) ? creep

   Exit: (10) leng([a, b, c], 3) ? creep

L = 3.

 

[trace]  ?-  len([a,b,c],X).

   Call: (10) len([a, b, c], _12088) ? creep

   Call: (11) len([b, c], _12346) ? creep

   Call: (12) len([c], _12346) ? creep

   Call: (13) len([], _12346) ? creep

   Exit: (13) len([], 0) ? creep

   Call: (13) _12350 is 0+1 ? creep

   Exit: (13) 1 is 0+1 ? creep

   Exit: (12) len([c], 1) ? creep

   Call: (12) _12356 is 1+1 ? creep

   Exit: (12) 2 is 1+1 ? creep

   Exit: (11) len([b, c], 2) ? creep

   Call: (11) _12088 is 2+1 ? creep

   Exit: (11) 3 is 2+1 ? creep

   Exit: (10) len([a, b, c], 3) ? creep

X = 3.

 

[trace]  ?- notrace.

true.

 

[debug]  ?- nodebug.

true.

 

 比较整数

 

?- 2<4.

true.

 

?- 2=<4.

true.

 

?- 4=<4.

true.

 

?- 4=:=4.

true.

 

?- 4=\=5.

true.

 

?- 4>=4.

true.

 

?- 4>2.

true.

 

?- 2 < 4+1.

true.

 

?- 5 < 4+2.

true.

 

?- 2+1<4.

true.

 

?-  2+1 < 3+2.

true.

 

?- 2+2=4.

false.

 

?- 2+2=:=4.

true.

 

?- X<3.

ERROR: Arguments are not sufficiently instantiated

ERROR: In:

ERROR:   [10] _12810<3

ERROR:    [9] <user>

?- 3<Y.

ERROR: Arguments are not sufficiently instantiated

ERROR: In:

ERROR:   [10] 3<_13802

ERROR:    [9] <user>

?- X=:=X.

ERROR: Arguments are not sufficiently instantiated

ERROR: In:

ERROR:   [10] _14804=:=_14806

ERROR:    [9] <user>

 

?- X=3,X<4.

X = 3.

 

?- X=b, X<4.

ERROR: Arithmetic: `b/0' is not a function

ERROR: In:

ERROR:   [11] b<4

ERROR:    [9] <user>

ERROR: 

ERROR: Note: some frames are missing due to last-call optimization.

ERROR: Re-run your program in debug mode (:- debug.) to get more detail.

 

 

//需要多解时键入’;’ 否则键入’.’

?- accMax([1,0,5,4],0,Max).

Max = 5 ;

false.

 

?- accMax([0,5,4],1,Max).

Max = 5 ;

false.

 

?- accMax([1,0,5,4],0,Max).

Max = 5 .

 

?- accMax([0,5,4],1,Max).

Max = 5 .

 

?- accMax([-11,-2,-7,-4,-12],0,Max).

Max = 0.

 

?- [user].

|: max(List,Max):-

|: List=[H|_],

|: accMax(List,H,Max).

|: ^D% user://3 compiled 0.00 sec, 1 clauses

true.

 

?- max([-11,-2,-7,-4,-12],Max).

Max = -2 .

 

?- max([1,2,46,53,0],X).

X = 53 .

 

 

 

练习 

?- [user].

|: increment(X,Y):-Y is X + 1.

|: sum(X,Y,Z):-Z is X + Y.

|: ^D% user://4 compiled 0.00 sec, 2 clauses

true.

 

?- increment(9,10).

true.

 

?- increment(9,X).

X = 10.

 

?- sum(45,98,X).

X = 143.

 

?- sum(45,98,99).

false.

 

?- sum(45,98,143).

true.  

 

?- [user].

|: addone([],[]).

|: addone([H|T],[H1|T1]):- H1 is H+1,addone(T,T1).

|: ^D% user://5 compiled 0.00 sec, 2 clauses

true.

 

?- addone([1,2,3,4,5,6],X).

X = [2, 3, 4, 5, 6, 7].

 

?- [user].

|: accMin([A|C], B, D):-

|: A<B,

|: accMin(C,A,D).

|: accMin([A|C],B,D):-

|: A>=B,

|: accMin(C,B,D).

|: accMin([],A,A).

|: ^D% user://6 compiled 0.00 sec, 3 clauses

true.

 

?- accMin([-11,-2,-7,-4,-12],0,Max).

Max = -12 .

 

?- [user].

|: scalarMult(_,[],[]).

|: scalarMult(A,[H|T],[H1|T1]):- H1 is A*H, scalarMult(A,T,T1).

|: ^D% user://7 compiled 0.00 sec, 2 clauses

true.

 

?- scalarMult(3,[2,7,4],Result).

Result = [6, 21, 12] .

 

?- [user].

|: dot([],[],0).

|: dot([H1|T1],[H2|T2],Result):- 

|: dot(T1,T2,Result1),

|: Result is H1*H2 + Result1.

|: ^D% user://1 compiled 0.00 sec, 2 clauses

true.

 

?- dot([2,5,6],[3,4,1],Result).

Result = 32.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值