Swi-prolog类型错误:'list'预期,找到一个化合物

时间:2018-06-18 08:39:31

标签: prolog typeerror swi-prolog

当我尝试使用以下代码来连接字符串时输入错误。预期的行为是生成字符串的串联为FName

make_file_name(Prefix, Extension, FName) :-
    ( atom(Prefix) ->
          name(Prefix, PrefixStr)
    ; PrefixStr = Prefix
    ),
    ( atom(Extension) ->
          name(Extension, ExtensionStr)
    ; ExtensionStr = Extension
    ),
    append(PrefixStr, ExtensionStr, FNameStr),
    name(FName, FNameStr).

可以生成如下错误:

➜  chill git:(master) ✗ swipl                                                     [18/06/18| 4:23PM]
Welcome to SWI-Prolog (threaded, 64 bits, version 7.6.4)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit http://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

?- consult('test_name.pl')
|    .
true.

?- make_file_name('orig-db', "-parser.pl", TestProg).
ERROR: Type error: `list' expected, found `[111,114,105,103,45,100,98|"-parser.pl"]' (a compound)
ERROR: In:
ERROR:    [9] name(_3402,[111,114|...])
ERROR:    [7] <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.

从错误信息中,很容易猜到字符串orig-db被转换为ASCII列表。

我可以使用yap prolog进行测试,这也令人困惑。

➜  chill git:(master) ✗ yap                                                      [18/06/18| 4:03PM]
% Restoring file /usr/lib/Yap/startup.yss
YAP 6.2.2 (x86_64-linux): Sat Sep 17 13:59:03 UTC 2016
   ?- [user].
 % consulting user_input...
| make_file_name(Prefix, Extension, FName) :-
| ( atom(Prefix) ->
|       name(Prefix, PrefixStr)
| ; PrefixStr = Prefix
| ),
| ( atom(Extension) ->
|       name(Extension, ExtensionStr)
| ; ExtensionStr = Extension
| ),
| append(PrefixStr, ExtensionStr, FNameStr),
| name(FName, FNameStr).
| 
 % consulted user_input in module user, 1 msec 9536 bytes
yes
   ?- make_file_name('orig-db', "-parser.pl", TestProg).
no

希望有人可以帮助解决此案。我是prolog的新手,想了解更多信息。

谢谢!

我正在尝试将早期的代码迁移到SWI-Prolog,这是写的 SICStus 3 #3: Thu Sep 12 09:54:27 CDT 1996或更早 作者Raymond J. Mooney ftp://ftp.cs.utexas.edu/pub/mooney/chill/。 带有此标记的所有问题都与此任务相关。我是prolog的新手,欢迎提供帮助和建议!

1 个答案:

答案 0 :(得分:0)

开始于 swipl --传统 会解决这个问题,但还有很长的路要走 您也可以设置与双引号相关的 prolog 选项

这个问题很老了,不知道你有没有完成构建和训练它