Итак, я очень новичок в Haskell, и я знаю, что в этом есть много информации, но я просто не понимаю. Если кто-то может помочь объяснить и показать мне, что я делаю неправильно, что было бы весьма признателен,Как найти список целых чисел в 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
, но очевидно, что это не работает, может кто-то уточнить, что я делаю неправильно
Ваш вопрос немного разбросан и трудно следовать. Можете ли вы дать минимальный пример того, что именно вы хотите сделать с ожидаемым результатом и любыми ошибками компилятора, с которыми вы столкнулись? Кроме того, вы можете искать что-то в строках 'any (== 5) [1, 2, 3, 4, 5]', которое будет компилироваться, но 'if any (5 ==) Recipe' is not корректный синтаксис, поскольку 'if' должен иметь' then' и 'else', а' Recipe' - тип, а не значение. – bheklilr
Кажется, что «правила» должны быть предикатами рецептов (т. Е. Типа 'Рецепт -> Bool'). Например, вы можете написать правило 2 (этот рецепт не имеет ни перца, ни лука) как '\ r -> not (pepper \' elem \ 'r && onion \' elem \ 'r)'. Это то, что вы ищите? Неясно, что делать «законным»; комментарий относится к объединению правил, но ваш код ничего не делает. – user2407038
Извините, позвольте мне исправить свой вопрос, мне дал код мой учитель, и он должен быть сломанным кодом. Он компилируется и запускается, но не работает должным образом. Сейчас есть много комментариев «правил», эти правила должны, по сути, возвращать bool, например: «если трюфели, а затем точно трюфели», я пытаюсь выполнить поиск по каждому списку рецептов и посмотреть, соблюдает ли оно правило. If это имеет смысл .. – drocktapiff