连接列表元素 - Scheme

时间:2016-03-05 18:33:50

标签: list scheme cons

如果我有一个产生以下结果的方案代码:(我正在使用缺点)

'((1 . 0) . 0)

我怎么能接受这个,只是简单地显示100就好像它只是一个整数而不是带有这些点和括号的列表?

谢谢!

编辑:

我的完整代码:

(define (func X) 
    (if ( <= X 3 )
       X
            (cons (modulo X 4) (func(floor(/ X 4)) ))  
))

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您尝试将数字从基数10转换为基数4,然后将其显示为数字,但实施时存在一些问题。

您正在构建列表作为输出 - 但这不是您想要的,您需要数字。此外,您以错误的顺序遍历输入,这不是找到两个数字之间的商的正确方法。也许这会有所帮助:

ChromeDriverService service = ChromeDriverService.CreateDefaultService();
service.HideCommandPromptWindow = true;

var options = new ChromeOptions();
options.AddArgument("--window-position=-32000,-32000");

var driver = new ChromeDriver(service, options);
driver.Navigate().GoToUrl("https://www.google.co.uk");

或者,您可以输出字符串来强调输出不在基数10的事实:

(define (func X)
  (let loop ((n X) (acc 0) (mult 1))
    (if (< n 4)
        (+ (* mult n) acc)
        (loop (quotient n 4)
              (+ (* mult (modulo n 4)) acc)
              (* mult 10)))))

它会按预期工作:

(define (func X)
  (let loop ((n X) (acc ""))
    (if (< n 4)
        (string-append (number->string n) acc)
        (loop (quotient n 4)
              (string-append (number->string (modulo n 4)) acc)))))

答案 1 :(得分:2)

奥斯卡·洛佩兹的回答非常好。我不禁要说这个问题不需要“循环”构造:

;; translate a string to a base-4 string.
(define (func n)
  (cond [(< n 4) (number->string n)]
        [else (string-append (func (quotient n 4))
                                   (number->string (modulo n 4)))]))
相关问题