Unix 在sicstus prolog中将注释字符串转换为ASCII字符列表

Unix 在sicstus prolog中将注释字符串转换为ASCII字符列表,unix,prolog,sicstus-prolog,Unix,Prolog,Sicstus Prolog,目前我正在进行SICStus3和SICStus4之间的比较,但我遇到一个问题,即SICStus4不会参考注释字符串包含回车控件或制表符等的任何情况,如下所示 示例案例如下所示。它有3个带逗号分隔符的参数 case('pr_ua_sfochi'," Response: answer(amount(2370.09,usd),[[01AUG06SFO UA CHI Q9.30 1085.58FUA2SFS UA SFO Q9.30 1085.58FUA2SFS NUC2189.76END ROE1.0

目前我正在进行SICStus3和SICStus4之间的比较,但我遇到一个问题,即SICStus4不会参考注释字符串包含回车控件或制表符等的任何情况,如下所示

示例案例如下所示。它有3个带逗号分隔符的参数

case('pr_ua_sfochi',"
Response:
answer(amount(2370.09,usd),[[01AUG06SFO UA CHI Q9.30 1085.58FUA2SFS UA SFO Q9.30 1085.58FUA2SFS NUC2189.76END ROE1.0 XT USD 180.33 ZPSFOCHI 164.23US6.60ZP5.00AY XF4.50SFO4.5]],amount(2189.76,usd),amount(2189.76,usd),amount(180.33,usd),[[fua2sfs,fua2sfs]],amount(6.6,usd),amount(4.5,usd),amount(0.0,usd),amount(18.6,usd),lasttktdate([20061002]),lastdateafterres(200712282]),[[fic_ticketinfo(fare(fua2sfs),fic([]),nvb([]),nva([]),tktiss([]),penalty([]),tktendorsement([]),tourinfo([]),infomsgs([])),fic_ticketinfo(fare(fua2sfs),fic([]),nvb([]),nva([]),tktiss([]),penalty([]),tktendorsement([]),tourinfo([]),infomsgs([]))]],<>,<>,cat35(cat35info([])))
.
02/20/2006 17:05:10 Transaction 35 served by static.static.server1 (usclsefat002:7551) running E*Fare version $Name: build-2006-02-19-1900 $

",price(pnr(
        user('atl','1y',<>,<>,dept(<>,'0005300'),<>,<>,<>),
        [
                passenger(adt,1,[ptconly(n)])
        ],
        [

segment(1,sfo,chi,'ua','<>','100',20140901,0800,f,20140901,2100,'737',res(20140628,1316),hk,pf2(n,[],[],n),<>,flags(no,no,no,no,no,no,no,no,no)),

segment(2,chi,sfo,'ua','<>','101',20140906,1000,f,20140906,1400,'737',res(20140628,1316),hk,pf2(n,[],[],n),<>,flags(no,no,no,no,no,no,no,no,no))
        ]),[
                rebook(n),
                ticket(20140301,131659),
                dbaccess(20140301,131659),
                platingcarrier('ua'),
                tax_exempt([]),
                trapparm("trap:ffil"),
                city(y)
        ])).

现在,我的要求是将注释字符串转换为ASCII字符列表。

除了常规空格以外的布局字符不能出现在带引号的atom或双引号的列表中。这是ISO标准的一项要求,自3.9.0使用选项
--ISO
调用SICStus 3以来,已在SICStus中完全实现。由于SICStus 4仅支持ISO语法

您需要相应地插入
\n
\t
。所以不是

log('Response:
    yes').     % BAD!
现在写

log('Response:\n\tyes').
或者,为了使其可读性更好,请使用连续转义序列:

log('Response:\n\
\tyes').
请注意,使用文字制表符和文字换行符是非常有问题的。在打印输出上,您看不到它们!想想
'A\nB'
,它既不显示尾随空格也不显示尾随选项卡

但也有许多其他情况,如:制作程序文本的屏幕截图、制作程序文本的照片、使用3270终端仿真器以及复制输出。在过去,打孔的卡片。读取文件时的文本模式(最初由穿孔卡片驱动)。制表器也有类似的参数,它来自带有手动设置制表位的打字机

然后继续,因此很难键入选项卡。浏览器拒绝键入它(非常明智),如果将其复制到中,则会将其渲染为空格



如果我这样做了,还有另一个问题。名称
flatte case
应该写为
flatte\u case

除规则空格外的布局字符不能直接出现在带引号的原子或双引号的列表中。这是ISO标准的一项要求,自3.9.0使用选项
--ISO
调用SICStus 3以来,已在SICStus中完全实现。由于SICStus 4仅支持ISO语法

您需要相应地插入
\n
\t
。所以不是

log('Response:
    yes').     % BAD!
现在写

log('Response:\n\tyes').
或者,为了使其可读性更好,请使用连续转义序列:

log('Response:\n\
\tyes').
请注意,使用文字制表符和文字换行符是非常有问题的。在打印输出上,您看不到它们!想想
'A\nB'
,它既不显示尾随空格也不显示尾随选项卡

但也有许多其他情况,如:制作程序文本的屏幕截图、制作程序文本的照片、使用3270终端仿真器以及复制输出。在过去,打孔的卡片。读取文件时的文本模式(最初由穿孔卡片驱动)。制表器也有类似的参数,它来自带有手动设置制表位的打字机

然后继续,因此很难键入选项卡。浏览器拒绝键入它(非常明智),如果将其复制到中,则会将其渲染为空格



如果我这样做了,还有另一个问题。名称
flatte case
应该写成
flatte\u case

您使用的是什么版本的SICStus 3?SP4中没有SP3兼容的解析器,因此任何内置功能都无法将上述内容读入SP4。一个想法是使用SP3解析它,然后以SP4能够理解的方式从SP3中写出它,例如使用
read(X)、write_canonical(X)、write('.')、nl
。(注:上面的代码用两个参数定义了一个谓词
'-'
,您可能想将其命名为
flatten_cases
。)3.12.10版本使用的是SICStus 3.12.10patch1(x86-linux-glibc2.3):11月10日星期二10:39:10 CET 2009授权给eds.com |?-@AyyappaBoligala:---您似乎正处于从SICStus 3向SICStus 4的过渡阶段。因此,一个新的、更好的问题应该是更好的短语:从3到4的可行转换是什么?您使用的是什么版本的SICStus 3?SP4中没有SP3兼容的解析器,因此任何内置功能都无法将上述内容读入SP4。一个想法是使用SP3解析它,然后以SP4能够理解的方式从SP3中写出它,例如使用
read(X)、write_canonical(X)、write('.')、nl
。(注:上面的代码用两个参数定义了一个谓词
'-'
,您可能想将其命名为
flatten_cases
。)3.12.10版本使用的是SICStus 3.12.10patch1(x86-linux-glibc2.3):11月10日星期二10:39:10 CET 2009授权给eds.com |?-@AyyappaBoligala:---您似乎正处于从SICStus 3向SICStus 4的过渡阶段。因此,一个新的、更好的问题应该是更好的短语:从3到4.SICStus 3.12.10patch1(x86-linux-glibc2.3)的可行转换是什么?…我们在prolog中是否有任何内置函数将字符串转换为ASCII字符列表。@AyyappaBoligala:不清楚字符串对您意味着什么。SICStus 3.12.10patch1(x86-linux-glibc2.3):…我们在prolog中是否有任何内置函数将字符串转换为ASCII字符列表。@AyyappaBoligala:不清楚字符串对您意味着什么。