2011-12-01 3 views
0

그래서 농부 늑대 염소 양배추 비료 퍼즐을 해결하는 데 도움이되는 다른 절차를 작성해야합니다. 당신이 알고 있지 않은 사람들에게는 농부가 북쪽 강둑에서 다른 모든 물건들을 가지고 남쪽 은행까지 건너야 만합니다. 은행은 농부가 존재하거나 늑대가 염소로 남아 있지 않거나 염소가 배추와 함께 남아 있지 않은 3 가지 상황에서 안전합니다. 운동의 목적을 위해 변수는 [f, b, g, w, c]가 될 것입니다.프롤로그 목록에서 가능한 모든 옵션을 선택

내가 걸린 절차 (선택 (은행, 품목))는 안전하지 않은 상태로 은행에서 운송 수단의 일부가 될 수있는 1 또는 2 개의 요소 (항상 농부를 포함하는 - f)의 목록을 찾는 것을 포함합니다. .

([g, f, b], 항목)을 선택하면 Item에 대해 가능한 반환 값은 [f], [f, g], [f, b] 일 수 있습니다. 그러나 우리가 선택한 경우 ([g, f, c], Items), 염소와 양배추는 함께 남을 수 없기 때문에 [f, c] 또는 [f, g] 만 반환됩니다.

따라서 모든 항목에 가능한 모든 옵션을 제공하는 방법을 알려주세요. 목록에는 2 개가 넘지 않는 항목이 있습니까?

+0

당신이 명시 적 변수가 제발 이름을 지정할 수 있습니까? 그것은 현재 불분명하다! – m09

+0

변수 이름은 Bag of Fertilizer의 Farmer, Wolf, Goat, Cabbage, b 개체의 머리 글자에 불과합니다. 은행은 다른 객체를 포함하는 목록에 불과합니다. –

답변

1

내가 지금 테스트 할 수 없습니다하지만 난 당신과 같이 쓸 수 추측 :

choose(Bank, [f, Other]) :- 
    select(f, Bank, Rest), 
    select(Other, Rest, LeftBehind), 
    safe(LeftBehind). 
choose(Bank, [f]) :- 
    select(f, Bank, LeftBehind), 
    safe(LeftBehind). 
+0

좋아 보이는데, 항상 너와 함께 "f"를 가져 가야한다는 것을 잊지 마라. 또한 append/3을 사용하도록 만들 수 있습니까? 고마워요 :) –

+0

나는 한 가지를 이해하지 못합니다 - 항목이 처음에는 비어 있습니다. 왜 은행의 하위 집합인지 확인하는 중입니까? 또한 은행에서 가져온 요소는 항상 하나만 있어야하며, 항목의 다른 요소는 f가되어야합니다. f는 항상 Bank에 있습니다. 그렇지 않으면 운송이 불가능합니다. –

+0

거기 가서! 이제 맞습니다. – m09

관련 문제