我对计划很陌生。例如,我更熟悉python。但是,我正在尝试学习,因为方案似乎是一种非常有趣的语言。
我正在尝试创建一些代码
创建一个程序,该程序打印一个间隔(a,b)之间的所有整数(包括两端),并用随机(均匀分布),非数字,非空格,可打印的ASCII字符替换序列中8的每一个倍数。在所有情况下都假定a <b。如果数字超过1位,请确保替换字符数匹配!
最初是为了让我可以在这里回答这个问题(一个代码高尔夫问题),但是现在我只是想这样做,因为我不知道怎么做,所以我不必担心解决方案的长度。现在,我没有对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")
任何帮助,将不胜感激。谢谢!
我不是专门的计划者,但是我对其他的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情况-它需要三个表达式,第一个是test,第二个是“ then”分支,第三个是“ else”分支。“何时”和“除非”使您依次有多行代码,但是分别丢失了“ then”或“ else”用例。
其次,在方案中,您使用递归进行循环。Afaik,在基本方案中,这是唯一的循环,但是他们有很多技巧可以优化循环。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句