עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

פרולוג עץ משפחתי

Featured Replies

פורסם

אני בונה חוקים לעץ משפחתי.

חוק של "זוג" הוא- אם יש להם ילדים משותפים, הבעיה היא: שכשאני שואלת married(a,X) אז הוא יחזיר לי X= b כמספר הילדים.

איך אפשר לעצור את זה אחרי פעם אחת?

פורסם

השאלה לא מובנת.

פורסם
  • מחבר

הגדרתי את העובדות והחוקים הבאים (מצורפת סכימה של האילן יוחסין):


male(a).
male(b).
male(t).
male(e).
male(g).
male(h).
male(i).
male(r).


fmale(aa).
fmale(ee).
fmale(c).
fmale(f).
fmale(d).
fmale(s).


parent(a,b).
parent(a,c).
parent(a,d).
parent(aa,b).
parent(aa,c).
parent(aa,d).
parent(e,f).
parent(e,g).
parent(ee,g).
parent(ee,f).
parent(d,h).
parent(d,i).
parent(g,h).
parent(g,i).
parent(f,s).
parent(f,r).
parent(t,s).
parent(t,r).

father(X,Y):- parent(X,Y), male(X). % x is father of y
mother(X,Y):- parent(X,Y), fmale(X).

ברצוני להגדיר חוק האומר שזוג נשוי הוא גבר ואשיה שיש להם ילידם משותפים לדוגמא:

,
married(X,Y):- (parent(X,Z), parent(Y,Z), male(X), fmale(Y)); (parent(X,Z), parent(Y,Z), male(Y), fmale(X)).
[code]

שאילתא לדוגמא: [code]
?- married(X,aa).

X = a ;

X = a ;

X = a ;
no

מה לשנות כדי שבשאילתא הוא לא יחזיר לי מספר תשובות כמספר הילדים?

[attachment deleted by admin]

פורסם

הסיבה שמופיע לך a שלוש פעמים היא מכיוון שיש לך שלושה ילדים פוטנציאלים שמתאימים לפרדיקט שכתבת (b,c,d).

הפתרון הפשוט הוא להשתמש בקאט (!) באופן הבא: קיים הורה X עם ילד Z וגם קיים הורה Y עם ילד Z, ועכשיו שמים קאט (כלומר מהרגע ש-Z עושה יוניפיקציה עם אחד הילדים הוא ישאר כך עד לסוף ההרצה), וגם X הוא זכר וגם Y נקבה, או X הוא נקבה וגם Y הוא זכר.

השימוש בקאט הוא מאוד חשוב, אבל גם צריך להיות מאוד זהירים איתו.

פורסם
  • מחבר

ככה?

זה לא עובד!


married(X,Y):- (parent(X,Z), parent(Y,Z)), !, ((male(X), fmale(Y)); (male(Y), fmale(X))).


פורסם

אני לא יודע באיזה פלייבור של פרולוג את משתמשת אבל גם ב-Sicstus וגם ב-SWI (שהיא גרסה חינמית) מה שכתבת עובד יופי (אם כי יש שם עודף סוגריים) ואפשר פשוט:

married(X,Y):-
parent(X,Z),
parent(Y,Z),
!,
(male(X),fmale(Y);male(Y),fmale(X)).

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.