7

or 演算子を使用してルールを定義しましたが、複数の true または false を返します。

isloanaccept(Name,Guarantor,LoanType,LoanAmount,LoanTenure) 
:-  customer(Name,bank(_),customertype(_),
 citizen(Ci),age(Age),credit(C),
 income(I),property(_),bankemployee(_)), 
 Ci == 'malaysian',
 Age >= 18,
 C > 500, 
    I > (LoanAmount / LoanTenure) / 12,
 isguarantor(Guarantor,Name), 
 ispersonalloan(LoanType,LoanAmount,LoanTenure);
 ishouseloan(LoanType,LoanAmount,LoanTenure);
 isbusinessloan(LoanType,LoanAmount,LoanTenure);
 iscarloan(LoanType,LoanAmount,LoanTenure).

実際には、ローンの種類が特定のローン要件を満たしているかどうかを確認し、一般的なルールと組み合わせる必要があります。

つまり、上記のルールをこのように定義する必要があります。

Ci == 'malaysian', Age >= 18,C > 500, 
I > (LoanAmount / LoanTenure) / 12,
isguarantor(Guarantor,Name) 
    Or with   (ispersonalloan(LoanType,LoanAmount,LoanTenure);
             ishouseloan(LoanType,LoanAmount,LoanTenure);
             isbusinessloan(LoanType,LoanAmount,LoanTenure);
             iscarloan(LoanType,LoanAmount,LoanTenur)

コマンドラインで複数のステートメントではなく、1 つの true/false を返す必要があります。

またはルールのそれぞれは、コマンドラインでルールをチェックした後、必要ではない1つのブール値を返します。私はこのようにする必要があります (General Rule & (Multiple Or Rule) )。

1つのブール値を返すいくつかまたはルールを組み合わせる方法は?

助けてください。

ありがとう。

4

2 に答える 2

5

すべての「論理和」の目標を で囲むだけonceです。

例えば

once(
 ispersonalloan(LoanType,LoanAmount,LoanTenure);
 ishouseloan(LoanType,LoanAmount,LoanTenure);
 isbusinessloan(LoanType,LoanAmount,LoanTenure);
 iscarloan(LoanType,LoanAmount,LoanTenure)
).

ここで、「論理和」されたゴールは成功するか失敗するかのいずれかになります。

于 2010-07-28T19:29:09.173 に答える
0

まず、と組み合わせてターゲットを配置する必要が(あります。現在は, , ...,の論理和のように解釈されているためです。これは、演算子との優先順位が異なるためです。);customer(...),...,isguarantor(Guarantor,Name), ispersonalloan(...)ishouseloan(...)iscarloan(...),;

実際;には - 「相互排他的または」ではなく、「その他の場合」ではなく、実際の「または」を意味します。したがって、「ishouseloan」が「ispersonalloan」と一緒に成功できる場合、いくつかの成功したターゲットが得られます。この例でonce/1は (同様にnot(not(...))) 役立つかもしれませんが、タスクをより深くプロローグして、次のように非重複ターゲットを指定することもできます (重複については個人的な仮定をいくつか行っていますisXXX)。

isloan(LT, Am, T):-
  (ishouseloan(LT,Am,T)
  ;iscarloan(LT,AM,T)
  ;not((ishouseloan(LT,Am,T);iscarloan(LT,AM,T))),
    (ispersonalloan(LT,Am,T)
    ;isbusinessloan(LT,Am,T)
    )
  )

LTこの場合、AmTがまだ特定の値にバインドされておらず、それらisXXXが自由変数をバインドできる場合、すべてのローンを生成できるはずです。

于 2010-08-05T04:52:21.403 に答える