prolog - 这些解决方案中的第二种更有效吗?
问题描述
想知道作为实际问题,以下第二个解决方案的后编译是否更有效。
第一个解决方案:
write_data([]).
write_data([_]) :-
write('LAST!'),nl.
write_data([X|Rest]) :-
Rest = [_|_],
write(X),nl,
write_data(Rest).
第二种解决方案:
write_data([]).
write_data([H|T]) :-
write_data(T, H).
write_data([], _) :-
write('LAST!'),nl.
write_data([H|T], X) :-
write(X),nl,
write_data(T, H).
一些 swipl 魔术:
?- [library(vm)] .
?- vm_list(write_data) , halt.
第一个解决方案 swpl 魔术 ::
========================================================================
write_data/1
========================================================================
0 s_virgin
1 i_exit
----------------------------------------
clause 1 (<clause>(0xb002c300)):
----------------------------------------
0 h_nil
1 i_exitfact
----------------------------------------
clause 2 (<clause>(0xb017da50)):
----------------------------------------
0 h_list
1 h_void
2 h_nil
3 h_pop
4 i_enter
5 b_atom('LAST!')
7 i_call(write/1)
9 i_depart(nl/0)
11 i_exit
----------------------------------------
clause 3 (<clause>(0xb002bc80)):
----------------------------------------
0 h_list_ff(1,2)
3 i_enter
4 b_unify_var(2)
6 h_list
7 h_pop
8 b_unify_exit
9 b_var1
10 i_call(write/1)
12 i_call(nl/0)
14 b_var2
15 i_depart(write_data/1)
17 i_exit
第二个解决方案 swpl 魔术 ::
========================================================================
write_data/1
========================================================================
0 s_virgin
1 i_exit
----------------------------------------
clause 1 (<clause>(0xb272c300)):
----------------------------------------
0 h_nil
1 i_exitfact
----------------------------------------
clause 2 (<clause>(0xb27288c0)):
----------------------------------------
0 h_list_ff(1,2)
3 i_enter
4 b_var2
5 b_var1
6 i_depart(write_data/2)
8 i_exit
========================================================================
write_data/2
========================================================================
0 s_virgin
1 i_exit
----------------------------------------
clause 1 (<clause>(0xb2728920)):
----------------------------------------
0 h_nil
1 i_enter
2 b_atom('LAST!')
4 i_call(write/1)
6 i_depart(nl/0)
8 i_exit
----------------------------------------
clause 2 (<clause>(0xb272bc80)):
----------------------------------------
0 h_list_ff(2,3)
3 i_enter
4 b_var1
5 i_call(write/1)
7 i_call(nl/0)
9 b_var(3)
11 b_var2
12 i_depart(write_data/2)
14 i_exit
提交上述堆栈溢出后,消息“看起来您的帖子主要是代码;请添加更多详细信息。” . 人力资源管理。关于计算机编程的问题中的代码过多?(搔虚拟头)。我应该添加一些我在水冷却器周围听到的关于新革命“面向束”编程的空话吗?
解决方案
推荐阅读
- java - 无法安装应用程序:INSTALL_FAILED_USER_RESTRICTED
- python - Python Dataframe - 在除第一次出现的日期外删除重复的 TRUE
- bash - Shell 脚本 - 基于“时间戳”属性对“AWS cloudwatch 指标”json 数组进行排序,原始输出包括统计信息
- r - 从 R 中的列中删除字符串
- python - Alnum + 空间?Python
- javascript - Bootstrap flex 不会在打印时显示所有 svg
- android - ActivityNotFound 异常
- javascript - 在 Google Apps 中使用 HtmlService 表单上传文件总是会导致“服务器错误”和堆栈跟踪
- r - R函数选择2个具有相似文件名的文件
- html - HTML如何在标题下制作水平导航栏