标签: let

试图在计划中理解"让"

我正在尝试扩展一个简单的斐波那契函数,我需要多次使用每个项的值.所以,我想我会let用来保持价值观.但是,我没有得到我认为我应该从功能中得到的东西.

这是原始fib功能:

(define (fib n)
  (if (< n 2)
      n
      (+ (fib (- n 1)) (fib (- n 2)))))
Run Code Online (Sandbox Code Playgroud)

这是我尝试做同样的事情,但是let:

(define (fib-with-let n)
  (if (< n 2)
      0
      (let ((f1 (fib-with-let (- n 1)))
            (f2 (fib-with-let (- n 2))))
        (+ f1 f2))))
Run Code Online (Sandbox Code Playgroud)

结果:

> (fib 10)
55
> (fib-with-let 10)
0
Run Code Online (Sandbox Code Playgroud)

谢谢!

recursion scheme fibonacci let

2
推荐指数
2
解决办法
655
查看次数

Let语句内部的Irrefutable模式失败

我正在学习haskell,目前正在尝试从字符串中解析Integers和Floats.

但是,当我在"342"或任何没有单个或多个非数字字符的"数字"上尝试我的readNum函数时,ghci向我报告:

*异常:parse.hs:125:18-46:模式的无可辩驳模式失败(i,(a:as))

data Token
    = IntTok Int | FloatTok Float | EOF

readNum :: String->(Token, String)
readNum [] = (EOF, [])
readNum xs = let (i, (a:as)) = span isDigit xs   --This is line 125
                in (case a of
                        ('.') -> let (j, (b:c:bs)) = span isDigit as
                                        in (if ((toLower b) == 'e' && (c == '+' || c == '-' || (isDigit c)))
                                                then (let (k, d) = span isDigit bs in (FloatTok (read (concat [i,[a],j, …
Run Code Online (Sandbox Code Playgroud)

haskell design-patterns let

2
推荐指数
1
解决办法
954
查看次数

C#在LINQ中定义LET

我有多个使用相同LET变量的LINQ查询,我想以某种方式预定义这些.

IQueryable<RouteQueryModel> query =
    (from b in db.routes
     let avg_rating = b.ratings.Any() ? 
         b.ratings.Select(r => r.rating1).Average() : 
         0
     let distance_to_first_from_me = b.coordinates.
         Select(c => c.position).
         FirstOrDefault().
         Distance(DbGeography.FromText(currentLocation, 4326))
     let distance_to_last_from_me = b.coordinates.
         OrderByDescending(c => c.sequence).
         Select(d => d.position).
         FirstOrDefault().
         Distance(DbGeography.FromText(currentLocation, 4326))
     let distance_to_from_me = distance_to_first_from_me < distance_to_last_from_me ? 
         distance_to_first_from_me : 
         distance_to_last_from_me
     where b.endpoints.Any(e => values.Any(t => t == e.town.town_id))
     select new RouteQueryModel 
     { 
         b = b, 
         distance_to_from_me = distance_to_from_me.Value, 
         avg_rating = avg_rating
     }
 );
Run Code Online (Sandbox Code Playgroud)

我在8个不同的查询中使用了这三个distance_to LET,有没有办法为那些我可以在查询中使用的模板制作模板?

c# linq templates let

2
推荐指数
1
解决办法
9083
查看次数

方案:为什么'设置'!修改'let'的局部变量?

我一直在寻找一段时间,我找不到合适的问题,所以我会发布它.我希望不会发布.

我明白了什么!并且做,但我不明白为什么设置!可以修改let的局部变量并永远保持该值.例如:

(define count
  (let ((cont 0))
    (lambda ()
      (set! cont (+ cont 1))
      cont)))
Run Code Online (Sandbox Code Playgroud)

如果我们多次评估(计数),我们会看到结果是

> (count)
1
> (count)
2
> (count)
3
> 
Run Code Online (Sandbox Code Playgroud)

... 等等.但是,据我所知,cont是一个局部变量,为什么它保持价值呢?为什么每次调用函数时都没有设置为0?

好吧,那就是:)先谢谢!

PS:请原谅我的英语*o*

scheme count set let

2
推荐指数
1
解决办法
203
查看次数

Haskell:让里面列表理解出乎意料的结果

我是哈斯凯尔的新手,我正在努力学习哈斯克尔.我试图以最可能的方式创建像"复制"这样的简单函数.我已经完成了"复制"模式匹配和警卫.我无法让它在列表理解中使用.我可以想象让列表理解不理想,但我更感兴趣为什么它不起作用=].

我的问题是:为什么复制'产生[Int]和复制''产生[[Int]],甚至可以用列表理解中的let生成[Int]?

感谢您的时间和帮助:).

--list comprehension
duplicate' xs = [y | x <- xs, y <- [x,x]]
input => [1,2,3,4]
output => [1,1,2,2,3,3,4,4]
expected? => yes

--list comprehension with let
duplicate'' xs = [y | x <- xs, let y = [x,x]]
input => [1,2,3,4]
output => [[1,1],[2,2],[3,3],[4,4]]
expected? => yes
Run Code Online (Sandbox Code Playgroud)

haskell list-comprehension let

2
推荐指数
1
解决办法
803
查看次数

在Haskell`let`表达式中捕获名称

我正在写一个与此类似的函数:

f x = let
  x = ...
  in
    e
Run Code Online (Sandbox Code Playgroud)

由于Haskell中的作用域规则,在e中使用x将解析let构造中x的定义.

为什么在Haskell中允许这样的事情?编译器不应该拒绝这样的程序,告诉我们不能绑定与函数参数同名的值.

(这个例子可能过于简单,但在现实世界中,变量具有与之相关的语义含义,很容易犯这样的错误)

haskell let

2
推荐指数
1
解决办法
164
查看次数

哈斯克尔| 让表达式重新计算?

让我们说我们有这个功能:

foo n = let comp      n = n * n * n + 10
            otherComp n = (comp n) + (comp n)
        in  (otherComp n) + (otherComp n)
Run Code Online (Sandbox Code Playgroud)

comp实际执行了多少次?1还是4?Haskell"存储"函数是否导致let的范围?

haskell let

2
推荐指数
1
解决办法
196
查看次数

在haskell的lambda

我正在阅读Graham Hutton的"伟大"书的第2版"Haskell的Progamming"(剑桥出版社).

阅读State Monad部分,我偶然发现了一个我给自己做的小任务.

你怎么能用where而不是重写以下内容let

type State = Int
newtype ST a = S (State -> (a, State))

instance Functor ST where
    -- fmap :: (a -> b) -> ST a  -> ST b
    fmap g st = S (\state -> let (x, s') = app st state in (g x, s'))
Run Code Online (Sandbox Code Playgroud)

我试过这个代码的变体,但它不起作用:

instance Functor ST where
   -- fmap :: (a -> b) -> ST a  -> ST b
   fmap g st …
Run Code Online (Sandbox Code Playgroud)

syntax haskell where let

2
推荐指数
1
解决办法
95
查看次数

Haskell让表达式评估

我正在练习评估let表达式的练习问题,但我不理解该表达式的输出。

这是表达式:

let a = 2
    b = 1:[i * 2 | i <- b]
    f a = 1:[i * a | i <- (f a)]
in take (a+2) (f (head (tail b) ))
Run Code Online (Sandbox Code Playgroud)

输出应该是[1,2,4,8]。有人可以一步一步解释为什么这是输出

evaluation haskell expression stream let

2
推荐指数
1
解决办法
123
查看次数

在haskell中,GHCi命令行上的let x =和x =之间有什么区别吗?

我在Haskell GHCi中写一个简单的声明

myPi = 3.14
Run Code Online (Sandbox Code Playgroud)

我也可以这样写

let myPi = 3.14
Run Code Online (Sandbox Code Playgroud)

这两个声明之间的这个非常简单的示例有什么区别?我知道let的额外功能,但这里不需要

haskell let ghci

2
推荐指数
2
解决办法
106
查看次数