Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 36.1
- find cond (x:xs) = if cond x then (x, xs) else find cond xs
- f >>>= g = \zs -> let (x, xs) = f zs in (g x) xs
- return1 x = \xs -> (x, xs)
- 36.2
- import Data.Char
- strToInt xs = foldr (\x y -> digitToInt x + y * 10) 0 xs
- elka n = elka' n "7" n
- elka' _ acc1 0 = print (strToInt acc1)
- elka' n acc1 acc2 = do
- print (strToInt acc1)
- if (length acc1 == n) then elka' n "7" (acc2 - 1) else
- if (length acc1 == (n - 1)) && (acc2 == 1) then elka' n ('7':acc1) (acc2 - 1) else elka' n ('7':acc1) acc2
- 36.3
- import Data.List
- data Eval a = Var String | Let String (Eval a) (Eval a) |Num a | Add (Eval a) (Eval a) | Mult (Eval a) (Eval a) deriving Show
- eval :: Num a => Eval a -> [(String, Eval a)] -> a
- eval (Let vr l r ) xs = eval r ((vr, l):xs)
- eval (Var vr) xs = case (find (\(y, _) -> y == vr) xs) of
- Just (_, val) -> eval val xs
- Nothing -> undefined
- eval (Num l) xs = l
- eval (Add l r) xs = (eval l xs) + (eval r xs)
- eval (Mult l r) xs = (eval l xs) * (eval r xs)
- 36.4
- Насколько я помню, тут правильно формулировать эти вещи через термины свободных и связанных переменных, я своим словами:
- a) (\z x -> x * 2 +z) x
- б) имена переменных, которые входят в терм А не должны пересекаться с переменными, которые входят в терм B
- {-- ОК, засчитано, но не совсем правильно, на самом деле. А если пересекаются, что нам делать, сообщать об ошибка, чтоли? Нет, на самом леое просто те переменные, которые упомануты в слева в лямбда (в вашем примере z и x, их подставлять не надо --}
- 36.5
- Пусть это не так: существуют две различные нормальные формы. Но тогда, по свойству конфлюентности, эти формы не являются нормальными (так как к ним все еще можно применить бета-редукцию, которая приведет эти формы к одинаковым) - противоречие.
- 36.6
- (\x y -> y)((\x -> x x) (\x -> x x))
- 36.7
- fix f = f ( fix f )
- isPower3' f = \n -> if n == 1 then True else if mod n 3 /= 0 then False else f (div n 3)
- isPower3 n = fix isPower3' n
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement