首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大家好,我正在prolog中编写这个公式,任何帮助都很感谢:)

大家好,我正在prolog中编写这个公式,任何帮助都很感谢:)
EN

Stack Overflow用户
提问于 2021-05-02 10:27:51
回答 1查看 50关注 0票数 0

我试图在prolog中编写这个公式:

"str“是输入数字,因为字符串" base”是输入数字的基。

结果是,

(碱基)^0* strlen-1 +(碱)^1* strlen-2 +(碱)^2* strlen-3 +.

我对prolog很陌生,我现在有这样的想法:

代码语言:javascript
复制
calc([],_,0):-  !.
calc([H|T],Base,Res):-
    length([H|T],Long),
    Long >= 0,
    Size is Long - 1,
    power(Base , Size, Res),
    Res1 is Res * H,
    calc(T,Base,Res1).

但是它不能正常工作,我昨天花了很多时间试图解决这个问题,但没有成功。

任何帮助都很感激:)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-02 14:24:44

你可以这样做:

代码语言:javascript
复制
value(String, Base, Value) :-
    string_chars(String, Digits),
    value(Digits, Base, 0, Value).

value([], _, Value, Value).
value([Digit|Digits], Base, Accumulator, Value) :-
     atoi(Digit, Number),
     NewAccumulator is Base*Accumulator + Number,
     value(Digits, Base, NewAccumulator, Value).

atoi(Char, Int) :-  % convert ASCII code to integer
    char_code(Char, Code) ,
    Int is Code - 48.

预定义谓词string_chars将字符串转换为字符列表:

代码语言:javascript
复制
?- string_chars("1101", Chars).
Chars = ['1', '1', '0', '1'].

谓词atoi将表示数字的字符转换为相应的整数:

代码语言:javascript
复制
?- atoi('3', Integer).
Integer = 3.

假设[1,1,0,1]是整数列表(表示基2中的一个数字),则其在基10中的相应值可以计算如下:

代码语言:javascript
复制
Digit Accumulator
-     0
1     2 x 0 + 1 = 1
1     2 x 1 + 1 = 3
0     2 x 3 + 0 = 6
1     2 x 6 + 1 = 13

下面是一些示例:

代码语言:javascript
复制
?- value("1101", 2, V).
V = 13.

?- value("1201", 3, V).
V = 46.

Alternative S溶液假设您已经有了表示数字数字的整数列表,则解决方案甚至更简单:

代码语言:javascript
复制
value_integers(Digits, Base, Value) :-
    value_integers(Digits, Base, 0, Value).

value_integers([], _, Value, Value).
value_integers([Digit|Digits], Base, Accumulator, Value) :-
     NewAccumulator is Base*Accumulator + Digit,
     value_integers(Digits, Base, NewAccumulator, Value).

下面是一些示例:

代码语言:javascript
复制
?- value_integers([1,1,0,1], 2, Value).
Value = 13.

?- value_integers([1,2,0,1], 3, Value).
Value = 46.

?- value_integers([1,2,0,1], 10, Value).
Value = 1201.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67355280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档