1

我需要将字符串转换为 ACII 加 1 并转换回来。

Next_letter = convert(char, convert(integer, Letter) + 1)

但是错误:

main.pro(19,48) 错误 c504:表达式的类型为“main::letter”,与“::integer”类型不兼容

完整程序:

   /* программа prog2_8.pro */
/* генерации ряда букв а…d в столбик в порядке возрастания */

implement main
    open core, console

domains
    letter = string.

class predicates
    write_letter : (letter).
clauses
    write_letter("e").

    write_letter(Letter) :-
        Letter < "e",
        write("   ", Letter),
        nl,
        Next_letter = convert(char, convert(integer, Letter) + 1),
        write_letter(Next_letter).

    run() :-
        write("letters:"),
        nl,
        write_letter("a"),
        fail().

    run() :-
        nl,
        write("Press Enter"),
        _ = readchar(),
        succeed().

end implement main

goal
    console::runUtf8(main::run).
4

1 回答 1

1

尝试以下使用char_int/2

char_int(Letter, IntLetter),        % Letter = 'a' -> IntLetter = 97
NextIntLetter = IntLetter + 1,      % NextIntLetter = 98
char_int(NextLetter, NextIntLetter) % NextLetter = 'b'

NextLetter应该是你需要的


来自 VIP 文档

char_int (CHAR CharArg , INTEGER IntArg )

流动模式 (i, o), (o, i), (i, i)

在字符及其 ASCII 值之间进行转换

评论

(i, o) 将 IntArg 绑定CharArg的 ASCII 码。 (o, i)将CharArg绑定到具有由IntArg指定的 ASCII 代码的字符 (注意它只考虑整数值的低字节)。 (i, i) 如果IntArg绑定到 CharArg 的 ASCII 码, 则成功;如果不是,则失败。

失败

参见 (i, i) 的备注。

错误

没有错误。

例子

要测试此示例,请使用 Visual Prolog VDE 中的“项目|测试目标”。

GOAL:
    char_int('a',X) 
    X=97 
    1 Solution

GOAL:
    char_int(X,97) 
    X=a 
    1 Solution

GOAL:
    char_int('a',97) 
    Yes

GOAL:
    char_int('a',197) 
    No

编辑

您的问题是 astring不能转换为ASCII 值,因为它是一组字符。你必须letter = stringletter = char和替换"(围绕你的字符)'

于 2018-02-19T08:26:50.910 回答