我遇到了一段看起来像这样的Haskell代码:
ps@(p:pt)
Run Code Online (Sandbox Code Playgroud)
@在这种情况下,符号意味着什么?我似乎无法在Google上找到任何信息(遗憾的是很难在Google上搜索符号),而且我在Prelude文档中找不到该功能,所以我想它必须是某种语法糖.
我试过谷歌搜索但是做得很短.我通过阅读一些文章来进一步提高我的Haskell知识,并且我遇到了一个使用我以前从未见过的语法的文章.一个例子是:
reconstruct node@(Node a b c l r) parent@(Node b d le ri)
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这些@.我试着在网上寻找答案但是很短暂.这只是一种嵌入标签以帮助使事情更清晰,或者它们对代码产生实际影响的方法吗?
我目前正在使用 SWI-Prolog 编写一些代码。当我多年前使用 Prolog 时,我可以发誓我能够在子句标题中将变量名称设置为“解构”,但现在它似乎对我来说不能正常工作(至少在 SWI-Prolog 中)。
玩具愚蠢的例子:
example(X = [Row|Rows]) :-
do_something_with_x(X),
do_something_with_row(Row),
...
Run Code Online (Sandbox Code Playgroud)
我想将它称为 egexample( [1,2,3] )并且我希望两者都X与[Row|Rows]同一个谓词的参数匹配,即[1,2,3]谓词主体中的第一个参数(此处为)。
有谁知道这是否可能?