Racket while循环
Problem: 1805. 字符串中不同整数的数目
lc题解地址
思路
函数式编程?那是啥?有
set!和hash-set!好用吗开始那一堆是在实现while break continue.按照racket文档里说的,你
(require dyoo-while-loop)也行。
?我require不了,leetcode没加载这个collection ,你应该去这个仓库把代码直接拉过来简单的语法还是问gptchat吧。不然你和我一样分不清{make-hash,make-hasheq,make-hasheqv,make-hashalw}的区别。
(string=? "0" (substring word p1 (+ p1 1)))判断字符串某个下标的字符是不是字符'0',你应该这么写。其他写法可能行。chatgpt基本上不会写racket程序,超过5行就别指望简单改改能运行起来;但是chatgpt具备将java代码改写成scala代码的能力,我把
class改成object就过了这道leetcode题目chatgpt将热门语言彼此做改写没什么问题的。2023-03-05将本次周赛t3t4AC的java代码交给chatgpt改写为scala代码,只需要把“class”改为“object”提交就能过题。
以后简单的业务开发,可能交给专门写prompt的人员了。(x

Code
(require (for-syntax racket/base)
racket/stxparam)
(provide while break continue)
;; The following is adapted from:
;;
;; http://matt.might.net/articles/implementing-exceptions/
;;
;; with a few adjustments so that break and continue are
;; hygienic, and the extent of the break and continue are
;; around the body.
;;
(define-syntax-parameter break
(lambda (stx)
(raise-syntax-error #f "Used outside the context of a while body" stx)))
(define-syntax-parameter continue
(lambda (stx)
(raise-syntax-error #f "Used outside the context of a while body" stx)))
;; This enforces the use of break and continue:
;; you have to use them with parens, or else they should
;; complain at compile time.
(define-for-syntax (force-use-with-parens b)
(lambda (stx)
(syntax-case stx ()
[(_)
(with-syntax ([b b])
(syntax/loc stx
(b)))]
[(kw arg arg-rest ...)
(raise-syntax-error #f
(format "Must be directly used without arguments [e.g: (~a)]"
(syntax->datum #'kw))
stx
#'arg)]
[_
(identifier? stx)
(raise-syntax-error #f
(format "Must be directly used [e.g: (~a)]"
(syntax->datum stx))
stx)])))
(define-syntax (while stx)
(syntax-case stx ()
[(_)
(raise-syntax-error #f "missing test and body" stx)]
[(_ cond)
(raise-syntax-error #f "missing body" stx)]
[(_ cond body ...)
(syntax/loc stx
(let/ec fresh-break
(let loop ()
(when cond
(let/ec fresh-continue
(syntax-parameterize
([break (force-use-with-parens #'fresh-break)]
[continue (force-use-with-parens #'fresh-continue)])
(begin body ...)))
(loop)))))]))
;; By the way: it's a bit unclear what should happen if
;; someone tries using break and continue within the
;; context of a nested while loop's test... e.g.
;; (while true
;; (while (begin (break))
;; 'huh?)
;; 'what?)
;;
;; This particular implementation is implemented such that
;; the call to break will exit the outer loop. It is an odd
;; thing to think about, isn't it? :)
;;
;; It should be easy to syntactically restrict if this really
;; becomes an issue, by syntax-parameterizing error productions
;; in the context of evaluating the _cond_ition.
(define/contract (num-different-integers word)
(-> string? exact-integer?)
(define s (make-hash)) ;键不允许重复
(define n (string-length word))
(define p1 0)
(define p2 -1)
(while #t
(while( and (< p1 n) (not (char-numeric? (string-ref word p1))) )
(set! p1 (+ p1 1)))
; (displayln (format "save1 p1= ~a p2= ~a" p1 p2))
(when (>= p1 n) (break)) ;建议when. if cond都不好使
(set! p2 p1)
; (displayln (format "save2 p1= ~a p2= ~a" p1 p2))
(while( and (< p2 n) (char-numeric? (string-ref word p2)) )
(set! p2 (+ p2 1))
)
; (displayln (format "save3 p1= ~a p2= ~a" p1 p2))
(while( and (> (- p2 p1) 1) (string=? "0" (substring word p1 (+ p1 1))) )
(set! p1 (+ p1 1))
)
( hash-set! s (substring word p1 p2) 1 )
(set! p1 p2)
)
(displayln (format "s= ~a" s)) ;看看这个哈希表长啥样
(hash-count s)
)
;下面是草稿
; (while (<= p1 5)
; (set! p1 (+ p1 1))
; ; (displayln p1)
; (displayln (string=? "0" (substring word p1 (+ p1 1))) )
; )
Racket while循环的更多相关文章
- scheme 教程 #lang racket
scheme 教程 #lang racket 来源 https://blog.csdn.net/yemeishenme/article/details/51471037 原文: https://le ...
- racket学习-call/cc (let/cc)
Drracket continuation 文中使用let/cc代替call/cc Racket文档中,let/cc说明为: (let/cc k body ...+) Equivalent to (c ...
- 【.net 深呼吸】细说CodeDom(8):分支与循环
有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...
- Recurrent Neural Network系列1--RNN(循环神经网络)概述
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- 模仿Linux内核kfifo实现的循环缓存
想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...
- 【JS基础】循环
for 循环的语法: for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被 ...
- 【python之路4】循环语句之while
1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...
- To Java程序员:切勿用普通for循环遍历LinkedList
ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...
- JavaScript单线程和浏览器事件循环简述
JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...
随机推荐
- Sentinel 高可用流量管理框架
出处:https://www.oschina.net/p/sentinel?hmsr=aladdin1e1 Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流.流量 ...
- 配置vscode快速输出模板
1.文件 ----> 首选项 -----> 用户片段:要配置什么文件的就搜什么文件的. 2.以HTML文件举例: 打开html.json: 输入以下代码: "Print to c ...
- Linux系统安装&VMware安装二
第八步: 完成后,选择刚刚创建好的系统
- noi 1.1 3 对齐输出
描述 输入三个整数,按每个整数占8个字符的宽度,右对齐输出它们. 输入 只有一行,包含三个整数,整数之间以一个空格分开. 输出 只有一行,按照格式要求依次输出三个整数,之间以一个空格分开. 样例输入 ...
- HDOJ--1010题C++
有两点需要注意,第一点就是,题意是指在第T秒时门才打开,并不是越早到门口就能越早出去,而是只要存在指定长的路径即可以出去. 第二点,每次深搜发现答案不符都必须将点重新初始化.#include<i ...
- OOP前三次作业总结
一.前言 在开始OOP学习之前,我从未了解过什么是面向对象编程,想当然的认为OOP是像从前学习C一样的编程逻辑(即面向过程编程),但在真正开始学习OOP之后,我了解到了以往面向过程编程的局限性与不便利 ...
- Luogu P3368 【模板】树状数组 2 [区间修改-单点查询]
P3368 [模板]树状数组 2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表 ...
- appium程序下载安装/appium desktop
官网地址:http://appium.io/ 点击下载按钮 默认跳转到最新版本,点击 Releases 回到版本列表页 该页可以看到对应的版本及更新时间,(最好不要下载最新版本) 如果是 Window ...
- 【pytest】@pytest.fixture与@pytest.mark.parametrize结合实现参数化
背景:测试数据既要在fixture方法中使用,同时也在测试用例中使用 使用方法:在使用parametrize的时候添加"indirect=True"参数.pytest可以实现将参数 ...
- SQL IIF函数的使用 判断为空数据不显示的问题
先说说IIF函数 IIF函数 需要一个条件 两个值 当条件满足的时候 执行第一个值 条件不满足的时候 执行第二个值 IIF(判断条件,值1,值2) 今天判断数据的时候 发现当值为NULL或者为' ...