我在http://rosettacode.org/wiki/Sierpinski_carpet#Scheme找到了生成Sierpinski地毯的代码 - 但它不会在DrRacket环境或WeScheme中运行。有人可以提供任何环境的解决方案?Sierpinski地毯的方案代码翻译
回答
我已经翻译了程序在WeScheme下运行。我做了一些改变:我使用WeScheme提供的图像基元来制作更好的图片,而不是使用(显示)和(换行)。你可以view the running program and its source code。为了方便起见,我还在这里包括来源:
;; Sierpenski carpet.
;; http://rosettacode.org/wiki/Sierpinski_carpet#Scheme
(define SQUARE (square 10 "solid" "red"))
(define SPACE (square 10 "solid" "white"))
(define (carpet n)
(local [(define (in-carpet? x y)
(cond ((or (zero? x) (zero? y))
#t)
((and (= 1 (remainder x 3)) (= 1 (remainder y 3)))
#f)
(else
(in-carpet? (quotient x 3) (quotient y 3)))))]
(letrec ([outer (lambda (i)
(cond
[(< i (expt 3 n))
(local ([define a-row
(letrec ([inner
(lambda (j)
(cond [(< j (expt 3 n))
(cons (if (in-carpet? i j)
SQUARE
SPACE)
(inner (add1 j)))]
[else
empty]))])
(inner 0))])
(cons (apply beside a-row)
(outer (add1 i))))]
[else
empty]))])
(apply above (outer 0)))))
(carpet 3)
这是WeScheme的修改代码。 WeScheme不支持这样做,循环语法,所以我用从SRFI-1展开,而不是
(define (unfold p f g seed)
(if (p seed) '()
(cons (f seed)
(unfold p f g (g seed)))))
(define (1- n) (- n 1))
(define (carpet n)
(letrec ((in-carpet?
(lambda (x y)
(cond ((or (zero? x) (zero? y))
#t)
((and (= 1 (remainder x 3)) (= 1 (remainder y 3)))
#f)
(else
(in-carpet? (quotient x 3) (quotient y 3)))))))
(let ((result
(unfold negative?
(lambda (i)
(unfold negative?
(lambda (j) (in-carpet? i j))
1-
(1- (expt 3 n))))
1-
(1- (expt 3 n)))))
(for-each (lambda (line)
(begin
(for-each (lambda (char) (display (if char #\# #\space))) line)
(newline)))
result))))
这似乎并没有生成所需的图形图片。 – lifebalance 2012-02-01 19:41:13
您可以在这里查看[输出](http://www.wescheme.org/view?publicId=bathe-pesky-cover-lunar-clock)。这个问题似乎与(为每个(lambda(字符)(显示(如果字符#\##\空格))我替换为(for-each(lambda(char)(display(if char“#” “),它的工作,但显示是锯齿状的,因为字体不固定,我不知道如何使用固定字体在Wescheme”显示“功能 – lifebalance 2012-02-25 18:36:06
它看起来像这样的代码在DrRacket前面加上一个
#lang racket
线表明该代码后运行正常写在球拍。如果这还不够,我可以提供更多细节。
- 1. sierpinski地毯 - 矩形区域
- 2. Java代码翻译
- 3. Subsetting 700+的翻译代码
- 4. iframe google翻译的代码?
- 5. Dashcode中的代码翻译
- 6. 在翻译VBScript代码Java代码
- 7. 翻译Java代码为PHP代码
- 8. 将C#代码翻译成Ruby代码
- 9. 翻译C#代码至R
- 10. 翻译一些伪代码
- 11. C#/ ASP.NET短代码翻译
- 12. 翻译C++代码片段
- 13. EXCEL至VBA代码翻译
- 14. 翻译代码laravel叶片
- 15. 翻译Matlab代码到Python
- 16. Bing翻译,C#代码
- 17. 翻译动画代码
- 18. 需要翻译此代码
- 19. 翻译lambda表达式到方案
- 20. 方案的代码
- 21. 翻译文件,使用此代码谷歌翻译的Java API
- 22. 翻译正常代码3AC - 三个地址码
- 23. 地图方法/函数的斯卡拉代码部分的翻译
- 24. 谷歌翻译翻译内嵌Javascript代码
- 25. 翻译的Java代码为伪
- 26. 翻译Matlab代码,以numpy的
- 27. 在Android代码中的动画翻译
- 28. 翻译MATLAB代码到Python(SciPy的)
- 29. 翻译简单的C代码
- 30. 源代码翻译到子集的ç
非常感谢。并且代码非常可读。关心, – lifebalance 2012-02-01 19:42:27