首页 > 解决方案 > 这些解决方案中的第二种更有效吗?

问题描述

想知道作为实际问题,以下第二个解决方案的后编译是否更有效。

第一个解决方案:

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

提交上述堆栈溢出后,消息“看起来您的帖子主要是代码;请添加更多详细信息。” . 人力资源管理。关于计算机编程的问题中的代码过多?(搔虚拟头)。我应该添加一些我在水冷却器周围听到的关于新革命“面向束”编程的空话吗?

标签: prolog

解决方案


推荐阅读