【问题标题】:Morse-decoder for words单词的莫尔斯译码器
【发布时间】:2012-11-05 13:41:31
【问题描述】:

我正在尝试为摩尔斯电码编写解码器。 到目前为止,我已经创建了一个包含所有字母的摩尔斯电码的树。

(define gap '/)
(define long-gap '_)
(define long '-)
(define short '*)

(define morsetree
(make-node "-" gap 
         (make-node "E" short
          (make-node "I" short 
           (make-node "S" short 
            (make-node "H" short empty empty)
            (make-node "V" long empty empty))
           (make-node "U" long 
             (make-node "F" short empty empty)
             empty))
          (make-node "A" long 
                     (make-node "R" short
                                (make-node "L" short empty empty)
                                empty)
                     (make-node "W" long 
                                (make-node "P" short empty empty)
                                (make-node "J" long empty empty))))

        (make-node "T" long 
         (make-node "N" short
          (make-node "D" short
           (make-node "B" short empty empty)
           (make-node "X" long empty empty))
          (make-node "K" long
           (make-node "C" short empty empty)
           (make-node "Y" long empty empty)))
         (make-node "M" long
          (make-node "G" short
            (make-node "Z" short empty empty)
            (make-node "Q" long empty empty))
          (make-node "O" long empty empty)))))

我有一个可用于单个字符的解码器:

(define (decode-character code atree)
  (cond
   ((symbol=? (first code) '*) (decode-character (rest code)(node-left atree)))
   ((symbol=? (first code) '-) (decode-character (rest code)(node-right atree)))
   ((symbol=? (first code) '/) (node-letter atree))))

但是我的文字解码器不能正常工作:

 (define (decode code atree)
 (cond
 ((symbol=? (first code) '*) (decode (rest code)(node-left atree)))
 ((symbol=? (first code) '-) (decode (rest code)(node-right atree)))
 ((symbol=? (first code) '/) (cons (node-letter atree) (decode (rest code) atree)))

 ((and (symbol=? (first code) '_) (empty? (rest code))) 
                                          (cons (node-letter atree) (cons " " empty)))
((and (symbol=? (first code) '_) (not(empty? (first (rest code))))) (cons (node-letter atree)  (cons " " (decode (rest code) atree))))))

使用此测试: (解码 (list '- '/'* '* '/'* '_) morsetree)

给我 (list "T" "D" "B" " ") 而不是 (list "T" "I" "E" " "),因为解码器停留在树中它停止的位置。所以不是 '* '* 解码读取 '- '* '*.

成功解码一个字母后,如何“跳转”到我的 morsetree 开头?

对于这样一个小问题,有很多文字。 我不需要一个代码,只是一个很好的提示我如何解决这个问题。 提前致谢。

【问题讨论】:

    标签: tree racket morse-code


    【解决方案1】:

    让您的代码基本保持不变的快速修复方法:
    为解码提供第三个参数,即完整树。始终将完整树作为第三个参数传递给下一次调用。在您开始一个新字母时的递归调用中,您将整个树传递给 atree,因此您不会在树的中间开始一个新字母。

    一个需要更多工作的修复程序,但会使其(在我看来)成为一个更清洁、更好的程序:
    在您的 decode 函数中,使用您已经创建的 decode-character 函数。解码函数没有理由需要了解树结构。您可以从decode-character中获取第一个字符,然后使用下一个'/或'_之后开始的代码调用decode

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 2016-07-09
      相关资源
      最近更新 更多