0

私はそれらの構造のDBを持っています

        my_family( person("FN","SN", unempl(), 20), 
                    person("FN2","SN", work("Soft", 200), 30), 
                    [person("FN3","SN", work("HP" , 10), 13), 
                    person("FN4","SN", work("LP", 200), 1), 
                    person("FN5","SN" , work("qwerty", 300), 1)]).

 domains
    family = person*.
    person = person(string Name, string LastName, work, integer Age).
    work = work(string Corp, real Salary)

同じ年齢の子供を持つ家族を取得するにはどうすればよいですか?

やってみます

 clauses
    length_of([], 0).
    length_of([_|T], L):-
        length_of(T, TailLength),
        L = TailLength + 1.

    ....

        my_family(person(_, _, _, FA), person(_, _, _, MA), Child),


        getName(Child).

        getName([]).
        getName([person(N, S, _, AC)|T]):-
            findall(1, _=person(_, S, _, AC), L),
            length_of(L, LN),
            2 <= LN,
            stdIO::writef("Family: %\n\n\n", S),
            getName(T).

しかし、それは機能しません。findallは1つの要素のみを持つリストLを返すようです。

4

1 に答える 1

0

findall で AC を削除する必要があると思います

findall(1, _=person(_, S, _, _), L),

それ以外の場合、リストは現在の人とまったく同じ年齢の人に制限されます。免責事項: そのコードをテストすることはできませんし、その構文は非常に標準的ではありません: ISO Prolog では、findall/3 は _=person(...) なしで動作しますが、それは私には知られていない Visual prolog の機能である可能性があります

于 2013-01-30T20:26:34.023 に答える