我尝试从 picat 中的控制台(stdin)读取一行作为字符串并得到它的一半:
main =>
L = read_line(),
B = L.length/2,
S = L.slice(1,B),
println(S).
崩溃error(integer_expected(2.0),slice)
当使用 int 而不是 B - 没有崩溃。那么如何将B变成整数呢?
我尝试从 picat 中的控制台(stdin)读取一行作为字符串并得到它的一半:
main =>
L = read_line(),
B = L.length/2,
S = L.slice(1,B),
println(S).
崩溃error(integer_expected(2.0),slice)
当使用 int 而不是 B - 没有崩溃。那么如何将B变成整数呢?
您可以使用内置函数,例如floor
,round
或ceiling
from math module
(更多函数在这里)。所以你可以像这样修改你的代码:
main =>
L = read_line(),
B = round(L.length/2),
S = L.slice(1,B),
println(S).
尝试使用integer(..)
函数转换L.length/2
为整数或使用to_integer()
函数......应该为你做。
类型推断在功能评估中起着至关重要的作用。(/ /2) 它是一个浮点算术运算符,但 slice/2 需要一个整数。所以你应该改用 (// /2)。
Picat> L=read_line(),println(L.slice(1,L.length//2)).
123456789
1234
L = ['1','2','3','4','5','6','7','8','9']
yes