0
좋아요. 저는 하스켈에 매우 익숙하며,이 정보에 대한 많은 정보를 알고 있지만 이해가되지 않습니다. 누군가가Haskell에서 정수 목록을 검색하는 방법
을 설명하고 내가 주시면 감사하겠습니다 그 잘못 뭘하는지 보여줘 도움이 될 수 있다면 여기에 코드의 일부입니다 : 여기
n = 8 -- number of ingredients (excluding cream)
type Recipe = [Integer] -- some ingredients
-- list all recipes with k of n ingredients
choose :: Integer -> Integer -> [Recipe]
choose n k
| k == 0 = [[]] -- only recipe with no ingredients
| n == k = [[1..n]] -- only recipe with all ingredients
| otherwise = choose (n-1) k ++ map (++ [n])(reverse (choose (n-1) (k-1)))
-- omlette legality (rules must hold conjunctively)
legal r = head $ map (\rule -> False) ruleset
ruleset = [rule0, rule1, rule2, rule3, rule4, rule5, rule6, rule7]
-- Rule 0: If truffles, then precisely truffles.
rule0 r = False
-- Rule 1: Either truffles, garlic, cream, or precisely one meat.
rule1 r = False
-- Rule 2: Not both peppers and onions.
rule2 r = False
을하고
bacon = elem 1
peppers = elem 2
ham = elem 3
mushrooms = elem 4
sausage = elem 5
onions = elem 6
garlic = elem 7
truffles = elem 8
cream = elem 9
이제 성분이다 규칙을 변경하여 논평 된 요구 사항을 충족 시키며 성분 목록을 통해 본질적으로 검색합니다.
줄을 따라 시도했습니다.r = if any (5==) Recipe
하지만 분명히 작동하지 않습니다, 누군가가 내가 잘못
를 사용하여 적용하는 경우
그런 다음
같은 것들을 쓸 수
enumFromTo
처럼 사용하는 기능에 의해 재료의 범위를 얻을 그리고 당신은 테스트 할 수 있습니다 귀하의 질문은 약간 흩어져서 따라 다니기가 어렵습니다. 예상되는 출력 및 발생한 모든 컴파일러 오류로 정확히 무엇을하고 싶은지에 대한 최소한의 예를 제공 할 수 있습니까? 또한,'any (== 5) [1, 2, 3, 4, 5]'의 라인을 따라 무언가를 찾고 있을지도 모르겠지만 컴파일하면 ('5 ==) Recipe'는 컴파일되지 않습니다. 'if'는'then'과'else'를 가져야하고'Recipe'는 값이 아닌 타입입니다. – bheklilr
"규칙"은 조리법에 대한 술어 (즉, 'Recipe -> Bool'유형) 여야합니다. 예를 들어, 규칙 2 (이 요리법에는 고추와 양파가 둘 다 없습니다)를'\ r -> not (고추 \'elem \'r && onion \'elem \'r)'로 쓸 수 있습니다. 이게 너가 찾고있는거야? '합법적 인'것이 무엇을해야하는지는 불분명하다. 주석은 규칙의 결합을 참조하지만 코드는 정렬을 수행하지 않습니다. – user2407038
죄송합니다. 제 질문을 수정하겠습니다. 선생님이 코드를 받았고 코드가 깨졌습니다. 컴파일되고 실행되지만 필요에 따라 작동하지 않습니다. 이제는 많은 주석이 달린 "규칙"이 있습니다.이 규칙은 본질적으로 bool을 반환해야합니다. 예를 들어, "트뤼플 인 경우 정확히 트뤼플 인 경우"각 레시피 목록을 검색하여 규칙을 준수하는지 확인하려고합니다. if 그게 말이 되네 .. – drocktapiff