Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2016
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. 36.1
  2. find cond (x:xs) = if cond x then (x, xs) else find cond xs
  3.  
  4.  
  5. f >>>= g = \zs -> let (x, xs) = f zs in (g x) xs
  6.  
  7. return1 x = \xs -> (x, xs)
  8.  
  9. 36.2
  10. import Data.Char
  11.  
  12. strToInt xs = foldr (\x y -> digitToInt x + y * 10) 0 xs
  13.  
  14. elka n = elka' n "7" n
  15. elka' _ acc1 0 = print (strToInt acc1)
  16. elka' n acc1 acc2 = do
  17. print (strToInt acc1)
  18. if (length acc1 == n) then elka' n "7" (acc2 - 1) else
  19. if (length acc1 == (n - 1)) && (acc2 == 1) then elka' n ('7':acc1) (acc2 - 1) else elka' n ('7':acc1) acc2
  20.  
  21. 36.3
  22. import Data.List
  23.  
  24. 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
  25.  
  26. eval :: Num a => Eval a -> [(String, Eval a)] -> a
  27.  
  28. eval (Let vr l r ) xs = eval r ((vr, l):xs)
  29. eval (Var vr) xs = case (find (\(y, _) -> y == vr) xs) of
  30. Just (_, val) -> eval val xs
  31. Nothing -> undefined
  32. eval (Num l) xs = l
  33. eval (Add l r) xs = (eval l xs) + (eval r xs)
  34. eval (Mult l r) xs = (eval l xs) * (eval r xs)
  35.  
  36. 36.4
  37. Насколько я помню, тут правильно формулировать эти вещи через термины свободных и связанных переменных, я своим словами:
  38.  
  39. a) (\z x -> x * 2 +z) x
  40. б) имена переменных, которые входят в терм А не должны пересекаться с переменными, которые входят в терм B
  41. {-- ОК, засчитано, но не совсем правильно, на самом деле. А если пересекаются, что нам делать, сообщать об ошибка, чтоли? Нет, на самом леое просто те переменные, которые упомануты в слева в лямбда (в вашем примере z и x, их подставлять не надо --}
  42.  
  43. 36.5
  44. Пусть это не так: существуют две различные нормальные формы. Но тогда, по свойству конфлюентности, эти формы не являются нормальными (так как к ним все еще можно применить бета-редукцию, которая приведет эти формы к одинаковым) - противоречие.
  45.  
  46. 36.6
  47. (\x y -> y)((\x -> x x) (\x -> x x))
  48.  
  49. 36.7
  50. fix f = f ( fix f )
  51.  
  52. isPower3' f = \n -> if n == 1 then True else if mod n 3 /= 0 then False else f (div n 3)
  53.  
  54. isPower3 n = fix isPower3' n
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement