我正在通过SICP工作.目前,在第一章中,我遇到了让Racket重新定义"原语"的问题.例如,我的印象是我应该可以任意做(define + 5),这样就可以了,或重新定义sqrt程序.相反,我明白了:
define-values: cannot change constant variable: +
Run Code Online (Sandbox Code Playgroud)
我的语言目前设置为R5RS,我认为这样可以解决与SICP的兼容性问题.
作为我自己的练习,我正在实施Miller-Rabin测试.(通过SICP工作).我理解费马的小定理并且能够成功地实现它.我在米勒 - 拉宾测试中被绊倒的部分是这个"1 mod n"业务.是不是1 mod n(n是一些随机整数)总是1?所以我很困惑"1模数n的非平方根"可能是什么,因为在我看来"1 mod n"在处理整数值时总是1.我错过了什么?
我正在通过SICP工作,问题2.6让我陷入了困境.在处理教会数字时,将零和1编码为满足某些公理的任意函数的概念似乎是有意义的.另外,使用零的定义导出单个数字的直接公式,并且add-1函数是有意义的.我不明白如何形成一个加号运算符.
到目前为止,我有这个.
(define zero (lambda (f) (lambda (x) x)))
(define (add-1 n)
(lambda (f) (lambda (x) (f ((n f) x)))))
(define one (lambda (f) (lambda (x) (f x))))
(define two (lambda (f) (lambda (x) (f (f x)))))
Run Code Online (Sandbox Code Playgroud)
通过wikipedia条目查看lambda演算,我发现plus的定义是PLUS:=λmnfx.mf(nfx).使用该定义,我能够制定以下程序.
(define (plus n m)
(lambda (f) (lambda (x) ((m f) ((n f) x)))))
Run Code Online (Sandbox Code Playgroud)
我不明白的是,如何仅使用先前派生的程序给出的信息直接导出该过程.任何人都可以用某种严格的证明形式回答这个问题吗?直觉上,我想我明白发生了什么,但正如Richard Feynman曾经说过的那样,"如果我不能建造它,我就无法理解......"
究竟有什么区别?似乎这些术语可以互换使用,但是阅读了Objective-c的维基百科条目,我遇到了:
除了C的过程编程风格之外,C++还直接支持某些形式的面向对象编程,泛型编程和元编程.
参考C++.显然他们有所不同?
我正在尝试为我正在研究的一个小Rails应用程序编写测试.Users模型与其他用户具有has_many through关系(两种方式),并且用户与assignments具有has_many关系.在UI结束时,用户可以选择另一个用户来附加新的作业.我想能够测试一下.现在的问题是,我无法弄清楚如何使用Capybara从我不知道文本的项目列表中进行选择.我写了一个rake任务来随机生成我的测试数据库,虽然我可以查看数据库并以这种方式编写我的测试,但它当然会破坏我重置数据库的第二个.
我只测试测试数据库中的分配数量变化1.我正在使用Rspec和Capybara.
.outerclass {
h3 {
color: blue;
}
p:not(.nested) {
color: green;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的LESS示例中,我希望将div类"outerclass"中的所有"p"元素作为目标,而不是在另一个嵌套div中称为".nested"的p元素 - 它不起作用,而是使所有p元素变为绿色.我试过了...
p:not(.nested p) // excludes all p elements
Run Code Online (Sandbox Code Playgroud)
并且...
p:not(.nested > p) // excludes all p elements
Run Code Online (Sandbox Code Playgroud)
......无济于事 这是可能的还是我错过了什么?我是LESS的新手
我正在研究Project Euler Problem 14.这是我的解决方案.
import Data.List
collatzLength :: Int->Int
collatzLength 1 = 1
collatzLength n | odd n = 1 + collatzLength (3 * n + 1)
| even n = 1 + collatzLength (n `quot` 2)
maxTuple :: (Int, Int)->(Int, Int)->Ordering
maxTuple (x1, x2) (y1, y2) | x1 > y1 = GT
| x1 < y1 = LT
| otherwise = EQ
Run Code Online (Sandbox Code Playgroud)
我正在运行以下GHCi
maximumBy maxTuple [(collatzLength x, x) | x <- [1..1000000]]
Run Code Online (Sandbox Code Playgroud)
我知道如果Haskell严格评估,那么这个时间就像O(n 3).由于Haskell懒惰地评估,看起来这应该是n的一些常数倍.这已经运行了近一个小时了.似乎很不合理.有谁知道为什么?
我编译了这个程序,并试图运行它.
import Data.List
import Data.Ord
import qualified Data.MemoCombinators as Memo
collatzLength :: Int -> Int
collatzLength = Memo.arrayRange (1, 1000000) collatzLength'
where
collatzLength' 1 = 1
collatzLength' n | odd n = 1 + collatzLength (3 * n + 1)
| even n = 1 + collatzLength (n `quot` 2)
main = print $ maximumBy (comparing fst) $ [(collatzLength n, n) | n <- [1..1000000]]
Run Code Online (Sandbox Code Playgroud)
我从GHC获得以下内容
Stack space overflow: current size 8388608 bytes.
Use `+RTS -Ksize -RTS' to increase it. …Run Code Online (Sandbox Code Playgroud) 这是一个软问题,但在下面的代码中,标有"caesar ciphers"的部分有很多重复.什么是"Haskell"处理这个问题的方法?我应该提高阶函数吗?我想到了,但我不知道什么是有道理的.是否有一种"密码"类型,我可以为密码定义?
此外,我知道它可能看起来有点过度工程,因为我在两个地方做同样的错误检查,但我认为从每个功能"意味着什么"的角度来看是有意义的.建议?
import Data.Char
import Control.Applicative
import Control.Monad
import Math.NumberTheory.Powers
--Helpers
extendedGcd::Integer->Integer->(Integer, Integer)
extendedGcd a b | r == 0 = (0, 1)
| otherwise = (y, x - (y * d))
where
(d, r) = a `divMod` b
(x, y) = extendedGcd b r
modularInverse::Integer->Integer->Maybe Integer
modularInverse n b | relativelyPrime n b = Just . fst $ extGcd n b
| otherwise = Nothing
where
extGcd = extendedGcd
relativelyPrime::Integer->Integer->Bool
relativelyPrime m n = gcd m n == …Run Code Online (Sandbox Code Playgroud) 我正在阅读SICP,并且作者在计算函数的固定点时研究了平均阻尼技术.我知道在某些情况下,即平方根是必要的,以阻止函数的振荡,y = x/y但我不明白为什么它神奇地帮助定点计算函数的收敛.救命?
编辑
显然,我有点想过这个.我似乎无法理解为什么在重复应用时平均一个函数本身会加速收敛.