0

我尝试从 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变成整数呢?

4

3 回答 3

2

您可以使用内置函数,例如floor,roundceilingfrom math module(更多函数在这里)。所以你可以像这样修改你的代码:

main =>
    L = read_line(),
    B = round(L.length/2),
    S = L.slice(1,B),
    println(S).
于 2017-06-28T08:09:43.460 回答
0

尝试使用integer(..)函数转换L.length/2为整数或使用to_integer()函数......应该为你做。

于 2015-03-28T18:18:43.323 回答
0

类型推断在功能评估中起着至关重要的作用。(/ /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
于 2015-07-30T07:25:49.783 回答