当我尝试使用以下代码来连接字符串时输入错误。预期的行为是生成字符串的串联为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的新手,欢迎提供帮助和建议!
答案 0 :(得分:0)
开始于 swipl --传统 会解决这个问题,但还有很长的路要走 您也可以设置与双引号相关的 prolog 选项
这个问题很老了,不知道你有没有完成构建和训练它