我有一個實驗我的項目,我基本上需要嵌入式一些s表達式插入代碼,並使其運行,這樣,如何將表達式列表添加到代碼中?
(define (test lst)
(define num 1)
(define l (list))
`@lst) ; oh, this is not the right way to go.
(define lst
`((define num2 (add1 num))
(displayln num2)))
我希望test
功能像test(lst)
在後球拍代碼:
(define (test lst)
(define num 1)
(define l (list))
(define num2 (add1 num)
(displayln num2))
我該如何在球拍中做到這一點?
更新 我想用eval
或前面這些問題的原因是,我使用Z3球拍結合,我需要生成公式(使用球拍綁定API),然後我就火在查詢有一點,那時候我需要評估這些代碼。 我還沒有想出其他的方法在我的情況去... 一個超級簡單的例子是,想象
(let ([arr (array-alloc 10)])
(array-set! arr 3 4))
我有一些模型來分析結構(所以我並沒有直接使用racketZ3 ),每個分析點的過程中,我將在映射程序到Z3類型的數據類型,並取得了一定的斷言,
我將生成類似:
在分配站點,我將需要進行下面的公式:
(smt:declare-fun arr_z3() IntList)
(define len (make-length 10))
然後,在陣列組網站,我將具有以下斷言和檢查3是否小於則長度
(smt:assert (</s 3 (len arr_z3)))
(smt:check-sat)
於是最後,我會收集生成公式如上,並在其中能火Z3結合運行以下收集的信息作爲代碼的形式將它們包裝:
(smt:with-context
(smt:new-context)
(define len (make-length 10))
(smt:assert (</s 3 (len arr_z3))) (smt:check-sat))
這是超級簡單的例子,我能想到的。 .. 有道理?
附註。由於某些原因,Z3 Racket綁定在5.3.1版本中會崩潰,但它大部分可以在5.2.1版本上工作。
從這加你的其他問題http://stackoverflow.com/questions/13428091/how-to-make-eval-work-on-define關於使用'eval',它聽起來像你想在運行時編寫代碼?你能幫助我們理解你在做什麼嗎? 'eval'可能不是最好的解決方法。 –
@GregHendershott問題中的編輯是否清晰? – monica
我只是在https://github.com/sid0/z3.rkt/blob/master/examples/nqueens.rkt快速瀏覽了Z3軟件包的N-Queens示例,並且我沒有看到任何理由爲什麼你需要這裏的語法級別的東西;爲什麼生成查詢需要eval?你能提供一個你想制定查詢方式的超級簡單例子嗎? –