我有conc
的定义:
conc([], L2, L2).
conc([X1|R1], L2, [X1|RN]) :-
conc(R1, L2, RN).
我不明白为什么conc([X | green], Y, [red, green, blue]).
会返回false
而不是
X = [red],
Y = [blue]
这里的推理过程是什么?
答案 0 :(得分:2)
免责声明:我不知道Prolog。这个答案的其余部分是一种愚蠢的猜测。
您提出的export function MyAwesomeMatcher ( url: UrlSegment[] ): UrlMatchResult {
if (url.length === 0) {
return null;
}
const reg = /^(awesome-path)$/;
const param = url[ 0 ].toString();
if (param.match( reg )) {
// myValue: "awesome-path"
return ({ consumed: url, posParams: { myValue: url[ 0 ] } });
}
return null;
}
// define application routes.
const routes: Routes = [
{ path: '', component: HomeComponent, pathMatch: 'full' },
{ matcher: MyAwesomeMatcher, component: MyAwesomeComponent }
...
];
解决方案没有意义,因为这会使X = [red]
成为一个单元素列表。我们假设
X
代替。
那会给我们
X = red
使用conc([red | green], [blue], [red, green, blue]).
的第二个等式变为
conc
即
conc(R1, L2, RN).
% with:
% X1 = red
% R1 = green
% L2 = [blue]
% [X1|RN] = [red, green, blue]
% i.e. X1 = red
% RN = [green, blue]
现在我们被卡住了,因为您的conc(green, [blue], [green, blue]).
规则都不适用于conc
。
问题是green
,因为[X | green]
不是列表的尾部。
您的意思是green
吗?
答案 1 :(得分:1)
在Prolog列表表示法中,|
将其左侧枚举的元素与其右侧剩余元素的列表分开。问题出在您的查询中。您需要[X | green]
或[X | [green]]
来代替[X,green]
而不是?- conc([X | [green]], Y, [red, green, blue]).
X = red,
Y = [blue].
。通过其中一个修复,您可以得到正确的答案。 E.g。
{
"name": "cmonapp",
"version": "1.0.0",
"description": "APPLICATION NAME",
"main": "start.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Meric",
"license": "ISC",
"dependencies": {
"hapi-auth-jwt": "^4.0.0",
"jsonwebtoken": "^8.2.2",
"knex": "^0.14.6",
"mysql": "^2.15.0"
}
}