prolog - 在 Prolog 中附加对列表元素的操作结果
问题描述
我现在在这个问题上停留了一段时间。
假设我有一些这样的事实:
function([1,2,3],['A']).
function([4,5,6],['B']).
我想写一个这样的谓词:
mapSomeList(List,Result)
例如,它可以将列表[[1,2,3],[4,5,6],[1,2,3]]
转换为['A','B','A']
。
如何使用递归来实现mapSomeList
?
我试过的:
mapSomeList([],[]).
mapSomeList([X|Rest],Result):-
function(X,Letter),
append(Letter,[X],Result),
mapSomeList(X,Rest).
但它只是不会返回Result
.
谢谢!
解决方案
解决这个问题的两种简单方法:一种有append/3
,一种没有。
解决方案 1 append/3
:
mapSomeList([],L,L).
mapSomeList([H|T],LT,LO):-
function(H,F),
append(LT,F,LT1),
mapSomeList(T,LT1,LO).
mapSomeList(List,Result):-
mapSomeList(List,[],Result).
?- mapSomeList([[1,2,3],[4,5,6],[1,2,3]],L).
L = [['A'], ['B'], ['A']]
解决方案 2 没有append/3
:
mapSomeList([],[]).
find_pair([H|T],[F|T1]):-
function(H,F),
mapSomeList(T,T1).
?- mapSomeList([[1,2,3],[4,5,6],[1,2,3]],L).
L = [['A'], ['B'], ['A']]
差异?尝试在内部运行两个目标time/1
(我使用了 SWISH)
?- time(find_pair([[1,2,3],[4,5,6],[1,2,3]],L)).
与append/3
:14 inferences, 0.000 CPU in 0.000 seconds (92% CPU, 378757 Lips)
没有append/3
:6 inferences, 0.000 CPU in 0.000 seconds (79% CPU, 377169 Lips)
因此,您已经从这个简单的示例中可以看出,没有附加的解决方案更快。
推荐阅读
- ruby-on-rails - Rails:Webpack-dev-server 具有未满足的对等依赖关系
- javascript - 如何正确使用 Promise 在函数末尾返回数组?
- amazon-ses - 无法使用亚马逊 ses 和烧瓶邮件通过 tls 发送电子邮件
- google-cloud-firestore - 如果我使用日期值,firestore orderBy 会起作用吗?
- php - 在 laravel 中使用 CKEditor 显示 textarea 内容
- python - 用 python 关闭 safari
- spring-security - 替换已弃用的 Spring Security JwtHelper
- xpath - IMPORTXML 导入的内容为空 - 请参阅演示表
- c# - Xero OAuth 2.0 API - c# dotnet core - 将附件上传到发票时未经授权 - 其他请求正常
- python - Python 速成课程 9-15 练习