List Processing Paradigm (declarative)

1. Test For Existence

     foobar(elt, (x . y)) :-
                      foo(elt, x).
     foobar(elt, (x . y)) :-
                      foobar(elt, y).

For example, the familiar <member> function can be written as:
     member(elt, (x . y)) :-
                     elt == x.
     member(elt, (x . y)) :-
                     member(elt, y).

2. Test For All Elements

     foobar(elt, ()).
     foobar(elt, (x . y)) :-
                     foo(elt, x),
                     foobar(elt, y).

For example, <all-digits>, which tests if all elemnts of a list are digits, can be written as:
     all-digits(()).
     all-digits((x . y) :-
                    member(x, (1,2,3,4,5,6,7,8,9,0)),
                    all-digits(y).

3. Return a Result -- Having processed ONE element

      foobar(foo, (x . y), Result) :-
                    foo(x),
                    result(x, y, Result)..
      foobar(foo, (x . y), Result) :-
                    foobar(foo, y, Result).

For example, <tail-after-a>, which returns sublist after a, can be written as:
      tail-after-a((x . y), result) :-
                     x == a,
                     result = y.
      tail-after-a((x . y), result) :-
                     tail-after-a(y, result).

4. Return a Result -- Having processed ALL elements

       foobar(foo, (), ()).
       foobar(foo, (x . y), (a . b)) :-
                    foo(x, a),
                    foobar(foo, y, b).

For example, <double>, which doubles every element in a list, can be written as:
       double((), ()).
       double((x . y), (a . b)) :-
                    a is 2 * x,
                    double(y, b).

Footnote: note the difference of building structure in the clause head and clause body.

转载于:https://www.cnblogs.com/feisimple/archive/2006/04/03/365629.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值