【问题标题】:Treat variables as symbols in Scheme将变量视为 Scheme 中的符号
【发布时间】:2021-06-16 10:42:06
【问题描述】:

我有以下列表

'(hash a (num 1 2) b (num 3 2) c (num 3 2) d (num 7 2))

在方案中。我想通过将eval 放在它前面来将其视为表达式。但是当我这样做时,它给了我错误: “不能在定义之前引用标识符”。 我的猜测是它将abc 视为变量。但我想把它们当作符号。这可能吗?

【问题讨论】:

  • 您需要在这些符号上加上另一个引号才能暂停它们的评估。 (另一方面,当你想eval 时,你通常会找错树,重新思考解决方案比试图修复它更好。)

标签: list variables scheme racket symbols


【解决方案1】:

好吧,你当然引用它们:

'(hash 'a (num 1 2) 'b (num 3 2) 'c (num 3 2) 'd (num 7 2))

应该避免eval,尤其是对于用户输入,我猜如果你知道数据,有很多方法可以在不使用 eval 的情况下生成哈希:

; makes an alist
(define content `(a ,(num 1 2)
                  b ,(num 3 2)
                  c ,(num 3 2)
                  d ,(num 7 2)))

;; makes a hash
(define my-hash (apply hash content))

如果这真的是用户输入,我会配对它:

(define user-input '((a 1 2) (b 3 2) (d 7 2)))
(define content 
  ;; or use flatmap
  (apply append 
        (map (lambda (v) (list (car v) (num (cadr v) (caddr v)))) 
             user-input))) 

;; makes a hash
(define my-hash (apply hash content))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-28
    • 2014-06-08
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2013-05-27
    • 2012-02-14
    相关资源
    最近更新 更多