小编del*_*lta的帖子

如何理解Haskell中的这个`$`用法

这种情况发生在你想将一堆函数应用于同一个变量的情况下,它可能如下所示:

map (\f->f 4) [odd, even]
Run Code Online (Sandbox Code Playgroud)

但是从LYAH使用$它非常整洁

map ($ 4) [odd, even]
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?首先我在ghci中键入它$ 4 odd,它失败了,然后我打字($ 4) odd,它工作正常.然后我检查($ 4)使用:t哪个显示的类型($ 4) :: Num a => (a -> b) -> b,oddodd :: Integral a => a -> Bool.这似乎有道理,但对我来说仍然不清楚.

任何人都可以清楚地解释它,它是另一种常见用法$,还有其他更多的用法$.

syntax haskell operators dollar-sign operator-sections

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

如何将小写字符串转换为大写字母,反之亦然?

我正在尝试编写一个程序,将字符串中的所有大写字符转换为小写和小写字符为大写.例如,如果字符串是"abcdE",它将在转换"ABCDe"后返回.这是我到目前为止所尝试的

class String
    def is_upper?
        self == self.upcase
    end

    def is_lower?
        self == self.downcase
    end
end

s = gets.chomp

if s.length <= 100
    a = s.split(//)
    b, c = Array.new
    a.each do |m|
        if m.is_upper? 
            b.push(m.downcase)
        end
        if m.is_lower?
            b.push(m.upcase)
        end
    end
    c = b.join
end
Run Code Online (Sandbox Code Playgroud)

但是我可以评估这个程序是非常错误的.我仍然是一个新手学习者.如果我的解决方案程序非常错误,请原谅我.请帮助我找到一个正确而简单的解决方案.

ruby

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

如何在迭代时更改数组的元素部分

数组xs由0到9之间的数字组成:

xs = [*0..9]
Run Code Online (Sandbox Code Playgroud)

测试奇偶校验,并将结果存储到位:

xs.map!(&:odd?)
puts xs.join(" ") 
# => false, true, ..., true
Run Code Online (Sandbox Code Playgroud)

xs按预期改变了.但我只是想改变数组的一部分

xs[5..-1].map!(&:odd?)
puts xs.join(" ")
# => 0 1 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)

我想这个slice操作会返回一个副本.或者其他一些原因.

xs[...] = xs[...].some_operation 是一个解决方案,但没有任何分配,有没有办法做到这一点?

ruby

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