没有错误,没有输出 - 出了什么问题?

时间:2016-12-24 18:18:34

标签: scheme

我对计划很新;例如,我对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")

任何帮助将不胜感激。谢谢!

1 个答案:

答案 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,在基本方案中,这是唯一一种循环,但它们有很多技巧来优化它。

相关问题