我对计划很新;例如,我对python更熟悉。但是,我试图学习,因为计划似乎是一种非常有趣的语言。
我试图创建一些代码
创建一个程序,在间隔(a,b)之间包含所有整数,并用随机(均匀分布),非数字,非空白,可打印的ASCII字符替换序列中8的每个倍数。假设a< b在所有情况下。如果数字超过1位数,请确保替换中的字符数匹配!
最初是这样我可以尝试回答问题here(代码高尔夫问题),但现在我只是想做,因为我不知道怎么做,所以我&# 39;我不担心解决方案的长度。现在,我没有对ascii字符位做任何事情,只是试着让事情变得有效。我在线编码,在repl.it中,没有任何输出,甚至没有错误。我的预期输出是运行1到16区间的函数并打印序列1 2 3 4 5 6 7 h 9 10 11 12 13 14 15 h
。
(define a 1)
(define b 16)
(define (s8 a b)
(let loop ((a<=b))
(if (= (mod a 8) (0))
(write h))
(else
(write a))
(define a (+ a 1))
(s8 a b)
(write "hello")
任何帮助将不胜感激。谢谢!
答案 0 :(得分:2)
我不是一个专门的阴谋家,但我对其他lisps非常熟悉,从你的代码我可以想象你有多困惑。我修补了你的代码以便它运行,虽然我避免了很大的变化,所以输出可能不是你期望的。
(define a 1)
(define b 16)
(define (s8 a b)
(when (<= a b)
(if (= (mod a 8) 0)
(write "h")
(write a))
(s8 (+ a 1) b)))
(s8 a b)
(write "Hello")
首先,在lisps中,如果总是有一个else情况 - 它需要三个表达式,第一个是测试,第二个是“then”分支,第三个是“else”分支。 “when”和“除非”允许您按顺序排列多行代码,但分别丢失“then”或“else”情况。
其次,在scheme中,你使用递归进行循环。 Afaik,在基本方案中,这是唯一一种循环,但它们有很多技巧来优化它。