lcs([ H|L1],[ H|L2],[H|Lcs]) :-
!,
lcs(L1,L2,Lcs).
lcs([H1|L1],[H2|L2],Lcs):-
lcs( L1 ,[H2|L2],Lcs1),
lcs([H1|L1], L2 ,Lcs2),
longest(Lcs1,Lcs2,Lcs),
!.
lcs(_,_,[]).
longest(L1,L2,Longest) :-
length(L1,Length1),
length(L2,Length2),
( Length1 > Length2
-> Longest = L1
; Longest = L2
).
Run Code Online (Sandbox Code Playgroud)
到目前为止这是我的代码.我怎样才能优化它以便打印前缀,例如:
["interview", "interrupt", "integrate", "intermediate"]
Run Code Online (Sandbox Code Playgroud)
应该回来 "inte"
Prolog有点生疏,有一段时间没做过:)
嘿伙计,所以我试图创造一些像这样的工作:
?- unpacking([[1], [1,2], [3]], Lst1, NewLst).
NewLst=[1,3]
Run Code Online (Sandbox Code Playgroud)
我这样写的:
unpacking([], Lst1, Lst1).
unpacking([[H]|T], Lst1, NewLst):-
append([H], Lst2),
unpacking(T, Lst2, NewLst).
unpacking([_|T], Lst1, NewLst):-
unpacking(T, Lst1, NewLst).
Run Code Online (Sandbox Code Playgroud)
我知道我做错了什么,但是,我是在Prolog开始所以,需要从我的错误中吸取教训:)
该项目是关于将半自然语言翻译成SQL表格.代码:
label(S) --> label_h(C), {atom_codes(A, C), string_to_atom(S, A)}, !.
label_h([C|D]) --> letter(C), letters_or_digits(D), !.
letters_or_digits([C|D]) --> letter_or_digit(C), letters_or_digits(D), !.
letters_or_digits([C]) --> letter_or_digit(C), !.
letters_or_digits([]) --> "", !.
letter(C) --> [C], {"a"=<C, C=<"z"}, !.
letter(C) --> [C], {"A"=<C, C=<"Z"}, !.
letter_or_digit(C) --> [C], {"a"=<C, C=<"z"}, !.
letter_or_digit(C) --> [C], {"A"=<C, C=<"Z"}, !.
letter_or_digit(C) --> [C], {"0"=<C, C=<"9"}, !.
table("student").
sbvr2sql --> label(Name), " is an integer.", {assert(fields(Name, "INT"))}.
sbvr2sql --> label(Name), " is a string.", {assert(fields(Name, "VARCHAR(64)"))}.
sbvr2sql(Table, Property) --> label(Table), …Run Code Online (Sandbox Code Playgroud) 我正在尝试将字符串转换为ascii代码列表,如下所示:
7 ?- string_to_list("I'm a big blue banana in space!", C).
C = [73, 39, 109, 32, 97, 32, 98, 105, 103|...].
8 ?-
Run Code Online (Sandbox Code Playgroud)
如你所见,这并没有给我整个列表,但我需要它.
这个解决方案不起作用:我不能按w,因为它给了我答案并完全停止.这也不是:我可以调用该函数,它返回true,但列表仍未完全显示.
11 ?- set_prolog_flag(toplevel_print_options,[quoted(true), portray(true), max_depth(0), spacing(next_argument)]).
true.
12 ?- string_to_list("I'm a big blue banana in space!", C).
C = [73, 39, 109, 32, 97, 32, 98, 105, 103|...].
13 ?-
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏!
我正试图将我的大脑第一次包裹在Prolog(SWI-Prolog),我正在努力克服我确定的基础知识.我正试图拿一个像"馅饼"这样的字符串并打印出军事北约拼写它看起来像这样:
spellWord("Pie").
Papa
India
Echo
Run Code Online (Sandbox Code Playgroud)
目前我只是想验证我正在使用[H | T]语法和Write函数.我的功能是:
spellWord(String) :- String = [H|T], writeChar(H), spellWord(T).
writeChar(String) :- H == "P", print4("Papa").
Run Code Online (Sandbox Code Playgroud)
打电话时spellWord("Pie").这当前只返回false.
我有这个代码将整数转换为罗马数字我需要添加一个函数,将整数与罗马数字输入进行比较,并显示它是否为try或false,例如:roman(v,5).真正
toroman(0).
toroman(N) :- N < 4, put("I"), M is N - 1, toroman(M).
toroman(N) :- N = 4, put("I"), put("V").
toroman(N) :- N = 5, put("V").
toroman(N) :- N < 9, put("V"), M is N - 5, toroman(M).
toroman(N) :- N = 9, put("I"), put("X").
toroman(N) :- N < 40, put("X"), M is N - 10, toroman(M).
toroman(N) :- N < 50, put("X"), put("L"), M is N - 40, toroman(M).
toroman(N) :- N < 90, put("L"), M is N …Run Code Online (Sandbox Code Playgroud) 我在prolog中有一个字符代码列表.
我想把它们改成字符.
例如,
L = "abc"
回报 L = [97,98,99]
假设我开始 L = [97,98,99]
无论如何将L转换回abc,如果存在方法
convert(L, X) 回报 X = abc
谢谢.
我想创建一个像这样的语言被接受的DCG:
正如您所看到的,这意味着a和b的特定顺序,然后是c,然后再次与c之前的顺序完全相同.如果不满足这些条件,它将失败.
我目前在这里采用我的方法(工作,但也识别错误的单词)
s --> x, s, x.
s --> [c].
x --> [a].
x --> [b].
Run Code Online (Sandbox Code Playgroud)
你们有人可以帮我解决我需要改变的问题吗?我不知道该怎么做.非常感谢.
在 Prolog 中,传统上有两种表示字符序列的方法:
DCG 是一种编写从左到右列表处理代码的符号方式,旨在对“分解文本列表”进行解析。根据偏好,待处理的列表可以是字符列表或代码列表。但是,在写下常量时,字符/代码处理的表示法有所不同。通常以“字符样式”或“代码样式”编写 DCG 吗?或者甚至在模块导出 DCG 非终端的情况下采用字符/代码样式以实现可移植性?
'a': 一个字符(像往常一样:单引号表示一个原子,如果标记以小写字母开头,它们可以被省略。)0'a:该代码的a。['a','b']: 一个字符列表。[ 0'a, 0'b ]:列表码,即编码a和b(这样就可以避免在实际的代码点值打字)。"a"代码列表。传统上,双引号字符串被分解为代码列表,这种表示法在 DCG 上下文中也适用于 SWI-Prolog,即使 SWI-Prolog 将“双引号字符串”映射到特殊的字符串数据类型。`0123`. 传统上,反引号内的文本被映射到一个原子(我认为,95 ISO 标准只是避免对反引号字符串的含义进行具体说明。“这将是 ISO/IEC 13211 的这一部分的有效扩展到将反引号字符串定义为表示字符串常量。" )。在 SWI-Prolog 中,反引号内的文本被分解为代码 …如何在SWI-Prolog中打印一个术语列表.
我试过了:
portray_clause([term1, term2]).
但是这只是在一个长流中写出来,一个字符串甚至作为一个ascii字符代码列表出现 - 我想要打印"abc".
prolog ×10
dcg ×5
list ×3
character ×1
clpfd ×1
grammar ×1
nlp ×1
numbers ×1
pretty-print ×1
prolog-cut ×1
prolog-dif ×1
string ×1
swi-prolog ×1