AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[racket](coding)

Martin Hope
An5Drama
Asked: 2025-04-02 07:24:29 +0800 CST

编译时表达式在 Racket 中何时会被重新评估?

  • 6

这是此 QA 答案的一个后续问题。我使用 Racket v8.16。

来自doc1:compile_time_instantiation.rkt​

(module compile-time-number racket/base
  (require (for-syntax racket/base))
  (begin-for-syntax
    (printf "picked ~a\n" (random)))
  (printf "running\n"))

然后:

$ racket -i -e '(dynamic-require "compile_time_instantiation.rkt" #f)'
Welcome to Racket v8.16 [cs].
picked 0.015421409441077423
running
$ racket -i -e '(require "compile_time_instantiation.rkt")'
Welcome to Racket v8.16 [cs].
picked 0.14007121863188537
running
picked 0.7200261945290138
$ racket -i
Welcome to Racket v8.16 [cs].
> (require "compile_time_instantiation.rkt")
picked 0.7451208846143317
running
$ racket compile_time_instantiation.rkt
picked 0.9883107842338839
running

doc1 说:

同时, dynamic-require 仅实例化一个模块;它不访问模块。这种简化就是为什么前面的一些示例使用 dynamic-require而不是 require 的原因。

当一个模块被实例化时,它主体中的运行时表达式会被评估。

因此,第二条命令中的额外“picked ...”来自require扩展后的额外访问:

当访问一个模块时,其主体中的编译时表达式(例如宏定义)会被评估。

当模块被扩展时,它就会被访问。

通过访问评估的模块编译时表达式包括定义语法形式的右侧和开始语法形式的主体。

但为什么第三个没有呢?

racket
  • 1 个回答
  • 36 Views
Martin Hope
user28972687
Asked: 2024-12-29 11:54:55 +0800 CST

如何在 Racket 中创建硬链接?

  • 5

是否可以仅使用 Racket 创建文件的硬链接?

我确实尝试过使用 (make-file-or-directory-link),但它只能创建符号链接,而不是硬链接。我正在 *nix 环境中工作,因此我可以使用 (system) 来调用 shell,但我更愿意只在 Racket 上找到实现。

提前致谢。

racket
  • 1 个回答
  • 30 Views
Martin Hope
Ger Teck
Asked: 2024-12-13 02:51:14 +0800 CST

未绑定标识符骗局

  • 5
#lang racket

(define-syntax unpack
  (syntax-rules ()
    [(unpack) (begin (define x 1))]))

(unpack)

(+ x 1)

为什么我会收到错误:x: unbound identifier in: x?

定义宏后,我希望代码能够正确定义 x 且不出现错误?我似乎无法理解,这可能是语法或编译器的问题吗?

racket
  • 1 个回答
  • 16 Views
Martin Hope
Diane987
Asked: 2024-06-29 23:14:35 +0800 CST

Racket 中的子类型化 - 理解函数子类型的问题

  • 5

我正在准备期末考试,遇到了一个问题。主题是子类型,我理解子类型对记录的工作原理,但对于函数,我完全不明白它是如何工作的。我从考试中取了一个例子,你不必做整个例子。如果有人向我解释它对超类型和子类型的工作原理,对我来说就足够了,所以一个是超类型的例子,一个是子类型的例子,这样我就可以在其他例子中得到指导。

考虑类型 { head : int, neck : int, toes : int list} -> { hands : int, feet : int}

对于以下每种类型,如果它是上述类型的子类型,则回答“子类型”;如果它是上述类型的超类型,则回答“超类型”;如果都不是,则回答“都不是”;如果是子类型和超类型,则回答“两者兼有”。i. { toes : int list, neck : int } -> { hands : int, feet : int} ii. { head : int, neck : int, toes : int list} -> { hands : int, feet : int, arms : int} iii. { toes : int list, neck : int } -> { hands : int, feet : int, arms : int}. iv. { hands : int, feet : int} -> { head : int, neck : int, toes : int list} v.{ head : int, neck : int, toes : int list, fingers : int list} -> { feet : int}

我尝试了这条规则,但没有产生预期的输出。

函数子类型的一般规则是:If t3 <: t1 and t2 <: t4, then t1->t2 <: t3->t4这 t3 <: t1意味着t3 is subtype for t1

谢谢。

racket
  • 1 个回答
  • 21 Views
Martin Hope
spaceman777
Asked: 2024-03-01 02:27:07 +0800 CST

在 Racket 中制作一副纸牌

  • 5

我正在尝试使用 Racket 为二十一点游戏制作一整副扑克牌。但是,我有两个问题:

  1. 当我使用以下代码时

    ;This function creates a list of all the card faces.
    (define faces '(2 3 4 5 6 7 8 9 10 J Q K A))
    ;This function creates a list of all card suits.
    (define suits '(Clubs Diamonds Hearts Spades))
    
    ;make-deck: Creates a new (unshuffled) 52 card deck
    ;     Returns: The deck (a list of cards)
    ;     Parameters: none
    
    (define make-deck
      (letrec ([pair-items (lambda (x y)
                             (cond
                               [(null? x) '()]
                               [(null? y) '()]
                               [(displayln (cons (car x) (cons (car y) (pair-items x (cdr y)))))]
                               ))])                 
        (pair-items faces suits))
      )
    

    我明白了

    (2 Spades)
    (2 Hearts . #<void>)
    (2 Diamonds . #<void>)
    (2 Clubs . #<void>)
    

    我不知道问题是什么。

  2. 我不知道如何重置以将函数iterator中的下一个元素faces与整个函数配对suits。我用吗let?

racket
  • 1 个回答
  • 31 Views
Martin Hope
Q Qere
Asked: 2024-02-26 05:00:24 +0800 CST

TypedRacket 中的函数输入

  • 5

是否可以写出类似C++的东西

template <typename... T> std::string dup(int n, std::string s, T... tail) {
  std::string result;
  for (int i = 0; i < n; ++i) {
      result += s;
  }
  if constexpr (sizeof...(tail) == 0) {
    return result;
  } else {
    return result + dup(tail...);
  }
}


std::cout << dup(1, std::string("abc"), 2, std::string("xyz"), 3, std::string("a")) << std::endl; // abcxyzxyzaaa

我尝试在 TypedRacket 中编写以下函数

#lang typed/racket

(: repeat-string (-> Integer String String))
(define (repeat-string n str)
  (apply string-append (build-list n (λ (_) str))))

(: dup (All (T ...) (-> Integer String T ... T String)))
(define (dup n s . tail)
  (define result (repeat-string n s))
  (cond [(empty? tail) result]
        [else (string-append result (apply dup tail))])
  )

但我有类型检查错误: Type Checker: Bad arguments to function in 'apply': Domain: Integer String T ... T Arguments: (List T ... T) in: (apply dup tail)

老实说,我不明白为什么争论是(List T ... T)但不是(T ... T)。而且,函数是正确的,非类型化的 Racket 产生正确的结果

racket
  • 1 个回答
  • 40 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve