小编Jos*_*sto的帖子

Dret博士对SICP的问题

我正在通过SICP工作.目前,在第一章中,我遇到了让Racket重新定义"原语"的问题.例如,我的印象是我应该可以任意做(define + 5),这样就可以了,或重新定义sqrt程序.相反,我明白了:

define-values: cannot change constant variable: +
Run Code Online (Sandbox Code Playgroud)

我的语言目前设置为R5RS,我认为这样可以解决与SICP的兼容性问题.

lisp scheme sicp racket

30
推荐指数
3
解决办法
1万
查看次数

对Miller-Rabin感到困惑

作为我自己的练习,我正在实施Miller-Rabin测试.(通过SICP工作).我理解费马的小定理并且能够成功地实现它.我在米勒 - 拉宾测试中被绊倒的部分是这个"1 mod n"业务.是不是1 mod n(n是一些随机整数)总是1?所以我很困惑"1模数n的非平方根"可能是什么,因为在我看来"1 mod n"在处理整数值时总是1.我错过了什么?

algorithm primes sicp prime-factoring primality-test

19
推荐指数
3
解决办法
3301
查看次数

算术与教会数字

我正在通过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曾经说过的那样,"如果我不能建造它,我就无法理解......"

scheme lambda-calculus sicp church-encoding

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

通用编程与元编程

究竟有什么区别?似乎这些术语可以互换使用,但是阅读了Objective-c的维基百科条目,我遇到了:

除了C的过程编程风格之外,C++还直接支持某些形式的面向对象编程,泛型编程和元编程.

参考C++.显然他们有所不同?

programming-languages metaprogramming generic-programming

17
推荐指数
4
解决办法
6065
查看次数

使用Capybara选择任何项目

我正在尝试为我正在研究的一个小Rails应用程序编写测试.Users模型与其他用户具有has_many through关系(两种方式),并且用户与assignments具有has_many关系.在UI结束时,用户可以选择另一个用户来附加新的作业.我想能够测试一下.现在的问题是,我无法弄清楚如何使用Capybara从我不知道文本的项目列表中进行选择.我写了一个rake任务来随机生成我的测试数据库,虽然我可以查看数据库并以这种方式编写我的测试,但它当然会破坏我重置数据库的第二个.

我只测试测试数据库中的分配数量变化1.我正在使用Rspec和Capybara.

tdd ruby-on-rails capybara

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

在LESS嵌套规则中使用CSS:not selector

.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的新手

css css-selectors css3 less

14
推荐指数
1
解决办法
5万
查看次数

为什么这个Haskell表达式如此之慢?

我正在研究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的一些常数倍.这已经运行了近一个小时了.似乎很不合理.有谁知道为什么?

optimization haskell

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

Haskell空间溢出

我编译了这个程序,并试图运行它.

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)

haskell ghc

9
推荐指数
3
解决办法
2943
查看次数

在Haskell中处理样板文件

这是一个软问题,但在下面的代码中,标有"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)

haskell duplication boilerplate

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

为什么平均阻尼会神奇地加速定点计算器的收敛?

我正在阅读SICP,并且作者在计算函数的固定点时研究了平均阻尼技术.我知道在某些情况下,即平方根是必要的,以阻止函数的振荡,y = x/y但我不明白为什么它神奇地帮助定点计算函数的收敛.救命?

编辑

显然,我有点想过这个.我似乎无法理解为什么在重复应用时平均一个函数本身会加速收敛.

algorithm math sicp

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